在Python中,我如何创建一个任意形状的numpy数组,填充所有元素为
True
或所有元素为False
?True
或所有元素为False
?答案:
numpy.full((2, 2), True)
解释:
使用numpy可以很容易地创建全1或全0的数组:
例如:numpy.ones((2, 2))
或 numpy.zeros((2, 2))
由于Python中True
和False
分别表示为1
和0
,因此我们只需要使用可选的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.12以来,full
函数会自动转换为第二个参数的dtype
,所以我们只需写:
numpy.full((2, 2), True)
numpy.full((2,2), True, dtype=bool)
numpy.full((2,2), True)
是等价的吗? - Pavelones
和zeros
函数分别创建全为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)
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.full
、np.zeros
或np.ones
。
full
只有固定的时间惩罚,而不是根据数组大小而变化的时间惩罚。因此,数组越大,这种差异就越不重要。 - Michael Currie 快速运行了timeit以查看np.full
和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]]
>>> 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(Size, Scalar Value, Type)。还有其他参数可以传递,有关文档,请查看https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
a=np.ones((2,2))
后面跟着a.dtype=bool
是无法实现的。 - medley56