256

在 Python 中,如何创建一个任意形状的 numpy 数组,其中填充全部为 True 或全部为 False?

4

7 回答 7

364

TLDR;这是答案:

numpy.full((2, 2), True)

更长的解释:

numpy 允许非常容易地创建全为 1 或全为 0 的数组:

例如numpy.ones((2, 2))numpy.zeros((2, 2))

因为TrueFalse在 Python 中分别表示为10,所以我们只需使用可选dtype参数指定这个数组应该是布尔值,我们就完成了。

numpy.ones((2, 2), dtype=bool)

返回:

array([[ True,  True],
       [ True,  True]], dtype=bool)

更新:2013 年 10 月 30 日

从 numpy版本 1.8开始,我们可以使用full更清楚地显示我们意图的语法来实现相同的结果(正如 fmonegaglia 指出的那样):

numpy.full((2, 2), True, dtype=bool)

更新:2017 年 1 月 16 日

由于至少 numpy版本 1.12full自动将结果转换为dtype第二个参数,所以我们可以写:

numpy.full((2, 2), True)
于 2014-01-16T23:22:01.010 回答
104
numpy.full((2,2), True, dtype=bool)
于 2016-02-05T12:38:09.523 回答
30

oneszeros,分别创建全为 1 和 0 的数组,采用可选dtype参数:

>>> numpy.ones((2, 2), dtype=bool)
array([[ True,  True],
       [ True,  True]], dtype=bool)
>>> numpy.zeros((2, 2), dtype=bool)
array([[False, False],
       [False, False]], dtype=bool)
于 2014-01-16T23:24:00.113 回答
9

如果它不必是可写的,您可以使用以下命令创建这样的数组np.broadcast_to

>>> import numpy as np
>>> np.broadcast_to(True, (2, 5))
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]], dtype=bool)

如果您需要它可写,您也可以fill自己创建一个空数组:

>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]], dtype=bool)

这些方法只是替代建议。一般来说,您应该坚持使用np.fullnp.zeros或者np.ones像其他答案所建议的那样。

于 2017-04-15T02:57:39.267 回答
6

迈克尔柯里答案的基准

import perfplot

bench_x = perfplot.bench(
    n_range= range(1, 200),
    setup  = lambda n: (n, n),
    kernels= [
        lambda shape: np.ones(shape, dtype= bool),
        lambda shape: np.full(shape, True)
    ],
    labels = ['ones', 'full']
)

bench_x.show()

在此处输入图像描述

于 2020-07-13T16:08:44.053 回答
5

np.full赶紧跑个timeit看看,和np.ones版本有什么区别。

答案:没有

import timeit

n_array, n_test = 1000, 10000
setup = f"import numpy as np; n = {n_array};"

print(f"np.ones: {timeit.timeit('np.ones((n, n), dtype=bool)', number=n_test, setup=setup)}s")
print(f"np.full: {timeit.timeit('np.full((n, n), True)', number=n_test, setup=setup)}s")

结果:

np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s


重要的

关于帖子np.empty(我无法发表评论,因为我的声誉太低):

不要那样做。不要np.empty用于初始化全True数组

由于数组是空的,内存没有被写入,也不能保证你的值是什么,例如

>>> print(np.empty((4,4), dtype=bool))
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True False False]]
于 2019-05-16T09:53:27.837 回答
-1
>>> a = numpy.full((2,4), True, dtype=bool)
>>> a[1][3]
True
>>> a
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True]], dtype=bool)

numpy.full(大小,标量值,类型)。还有其他参数可以传递,有关文档,请查看https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html

于 2017-04-15T02:28:22.087 回答