# How to create a numpy array of all True or all False?

## Question:

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

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

Explanation:

numpy creates 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 to the `dtype` of the second parameter, so we can just write:

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

`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)
``````
``````numpy.full((2,2), True, dtype=bool)
``````
``````>>> 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

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.

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

``````import perfplot

bench_x = perfplot.bench(
n_range= range(1, 200),
setup  = lambda n: (n, n),
kernels= [
lambda shape: np.ones(shape, dtype= bool),
lambda shape: np.full(shape, True)
],
labels = ['ones', 'full']
)

bench_x.show()
``````

Categories: questions
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.