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

?

## Answers:

**The answer:**

```
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
>>> np.broadcast_to(True, (2, 5))
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.

Answer: **No**

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