【发布时间】:2014-02-06 03:18:29
【问题描述】:
在 Python 中,如何创建一个任意形状的 numpy 数组,其中填充全部为 True 或全部为 False?
【问题讨论】:
标签: python arrays numpy boolean numpy-ndarray
在 Python 中,如何创建一个任意形状的 numpy 数组,其中填充全部为 True 或全部为 False?
【问题讨论】:
标签: python arrays numpy boolean numpy-ndarray
numpy 允许非常轻松地创建全为 1 或全为零的数组:
例如numpy.ones((2, 2)) 或 numpy.zeros((2, 2))
由于True 和False 在Python 中分别表示为1 和0,因此我们只需使用可选的dtype 参数指定此数组应为布尔值,我们就完成了。
numpy.ones((2, 2), dtype=bool)
返回:
array([[ True, True],
[ True, True]], dtype=bool)
更新日期:2013 年 10 月 30 日
由于 numpy version 1.8,我们可以使用 full 来实现相同的结果,其语法更清楚地表明了我们的意图(正如 fmonegaglia 指出的那样):
numpy.full((2, 2), True, dtype=bool)
更新日期:2017 年 1 月 16 日
由于至少numpy version 1.12,full 自动将结果转换为第二个参数的dtype,所以我们可以直接写:
numpy.full((2, 2), True)
【讨论】:
a=np.ones((2,2)) 后跟a.dtype=bool 不起作用。
numpy.full((2,2), True, dtype=bool)
【讨论】:
ones 和 zeros 答案不构造整数数组。他们直接构建了一个布尔数组。
numpy.full((2,2), True) 是等价的吗?
int 1 转换为 bool True。
ones 和 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。
【讨论】:
赶紧跑个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(大小,标量值,类型)。还有其他参数可以传递,有关文档,请查看https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
【讨论】:
np.full 回答了 - 一年多以前!