## 问题：如何创建全为真或全为假的numpy数组？

In Python, how do I create a numpy array of arbitrary shape filled with all True or all False?

## 回答 0

numpy已经可以非常容易地创建全1或全0的数组：

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

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

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

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

numpy already allows the creation of arrays of all ones or all zeros very easily:

e.g. `numpy.ones((2, 2))` or `numpy.zeros((2, 2))`

Since `True` and `False` are represented in Python as `1` and `0`, respectively, we have only to specify this array should be boolean using the optional `dtype` parameter and we are done.

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

returns:

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

UPDATE: 30 October 2013

Since numpy version 1.8, we can use `full` to achieve the same result with syntax that more clearly shows our intent (as fmonegaglia points out):

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

UPDATE: 16 January 2017

Since at least numpy version 1.12, `full` automatically casts results to the `dtype` of the second parameter, so we can just write:

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

## 回答 1

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

## 回答 2

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

`ones` and `zeros`, which create arrays full of ones and zeros respectively, take an optional `dtype` parameter:

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

``````>>> import numpy as np
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)``````

If it doesn’t have to be writeable you can create such an array with `np.broadcast_to`:

``````>>> import numpy as np
array([[ True,  True,  True,  True,  True],
[ True,  True,  True,  True,  True]], dtype=bool)
``````

If you need it writable you can also create an empty array and `fill` it yourself:

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

These approaches are only alternative suggestions. In general you should stick with `np.full`, `np.zeros` or `np.ones` like the other answers suggest.

## 回答 4

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

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

Quickly ran a timeit to see, if there are any differences between the `np.full` and `np.ones` version.

``````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")
``````

Result:

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

IMPORTANT

Regarding the post about `np.empty` (and I cannot comment, as my reputation is too low):

DON’T DO THAT. DON’T USE `np.empty` to initialize an all-`True` array

As the array is empty, the memory is not written and there is no guarantee, what your values will be, e.g.

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

## 回答 5

``````>>> 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/produced/numpy.full.html

``````>>> 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). There is other arguments as well that can be passed, for documentation on that, check https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html