在Python中,我如何创建一个numpy数组的任意形状填充全真或全假?


当前回答

赶紧跑了一遍,看看np之间是否有什么不同。Full和np。的版本。

回答:不

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的帖子。空的(我不能评论,因为我的声誉太低了):

不要那样做。不要用np。null初始化一个全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

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

赶紧跑了一遍,看看np之间是否有什么不同。Full和np。的版本。

回答:不

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的帖子。空的(我不能评论,因为我的声誉太低了):

不要那样做。不要用np。null初始化一个全true数组

由于数组是空的,内存不会被写入,也不能保证你的值会是什么。

>>> print(np.empty((4,4), dtype=bool))
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True False False]]

Ones和zero分别创建充满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)

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

>>> 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。满,np。0或np。就像其他答案暗示的那样。