如何创建一个所有True或所有False的numpy数组?

时间:2014-01-16 23:22:01

标签: python arrays numpy boolean numpy-ndarray

在Python中,如何创建一个任意形状的numpy数组,其中包含所有True或所有False?

7 个答案:

答案 0 :(得分:225)

numpy已经允许非常容易地创建所有1或全零的数组:

e.g。 numpy.ones((2, 2))numpy.zeros((2, 2))

由于TrueFalse分别在Python中表示为10,因此我们只需使用可选{{1}指定此数组应为boolean参数,我们完成了。

dtype

返回:

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

更新日期:2013年10月30日

由于numpy version 1.8,我们可以使用array([[ True, True], [ True, True]], dtype=bool) 来获得相同的结果,语法可以更清楚地显示我们的意图(正如fmonegaglia指出的那样):

full

更新时间:2017年1月16日

由于至少numpy version 1.12numpy.full((2, 2), True, dtype=bool)会自动将结果转换为第二个参数的full,所以我们可以写一下:

dtype

答案 1 :(得分:81)

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

答案 2 :(得分:26)

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)

答案 3 :(得分:10)

如果它不必是可写的,你可以使用np.broadcast_to创建这样的数组:

if array.include?(41) && array.include?(43)

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

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

这些方法只是替代建议。一般来说,您应该像其他答案一样坚持使用>>> 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

答案 4 :(得分:1)

迈克尔·柯里答案的基准

val scoreFragmentArgs by navArgs<ScoreFragmentArgs>()

enter image description here

答案 5 :(得分:0)

>>> 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

答案 6 :(得分:0)

快速运行一个计时器,以查看np.fullnp.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]]