En Python, comment créer un tableau numpy de formes arbitraires contenant tous les vrais ou tous les faux?
numpy permet déjà de créer très facilement des tableaux de tous les zéros ou de tous les zéros:
par exemple. numpy.ones((2, 2))
ou numpy.zeros((2, 2))
Puisque True
et False
sont représentés dans Python comme 1
et 0
, respectivement, il suffit de spécifier que ce tableau doit être booléen à l'aide de l'option dtype
paramètre et nous avons terminé.
numpy.ones((2, 2), dtype=bool)
résultats:
array([[ True, True],
[ True, True]], dtype=bool)
UPDATE: 30 octobre 2013
Depuis numpy version 1.8 , nous pouvons utiliser full
pour obtenir le même résultat avec une syntaxe qui montre plus clairement notre intention (comme l'indique fmonegaglia):
numpy.full((2, 2), True, dtype=bool)
UPDATE: 16 janvier 2017
Depuis au moins numpy version 1.12 , full
transfère automatiquement les résultats au dtype
du deuxième paramètre, nous pouvons donc écrire:
numpy.full((2, 2), True)
numpy.full((2,2), True, dtype=bool)
ones
et zeros
, qui créent respectivement des tableaux contenant des uns et des zéros, prennent un paramètre facultatif 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)
S'il ne doit pas nécessairement être inscriptible, vous pouvez créer un tel tableau avec 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)
_
Si vous en avez besoin, vous pouvez également créer un tableau vide et fill
vous-même:
_>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
_
Ces approches ne sont que des suggestions alternatives. En général, vous devriez vous en tenir à _np.full
_, _np.zeros
_ ou _np.ones
_ comme le suggèrent les autres réponses.
>>> 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 (taille, valeur scalaire, type). Il existe également d'autres arguments qui peuvent être passés, pour la documentation à ce sujet, vérifiez https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
Lance rapidement le temps de voir s'il y a des différences entre les versions np.full
et np.ones
.
Réponse: Non
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")
Résultat:
np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s
IMPORTANT
En ce qui concerne le post sur np.empty
(et je ne peux pas commenter car ma réputation est trop basse):
NE FAITES PAS CELA. N'UTILISEZ PAS np.empty
pour initialiser un tableau tout -True
Comme le tableau est vide, la mémoire n'est pas écrite et il n'y a aucune garantie quant à la valeur de vos valeurs, par exemple.
>>> print(np.empty((4,4), dtype=bool))
[[ True True True True]
[ True True True True]
[ True True True True]
[ True True False False]]
Juste pour ajouter plus de réponses, voici une autre façon de générer un tableau booléen de forme arbitraire. Les étapes sont explicites.
# desired shape
In [42]: shape = (2, 3)
In [43]: true_arr = np.empty(shape, dtype=np.bool)
# when needed an array with `False`y values, just negate the `True`thy values
In [44]: false_arr = ~np.empty(shape, dtype=np.bool)
In [45]: true_arr
Out[45]:
array([[ True, True, True],
[ True, True, True]], dtype=bool)
In [46]: false_arr
Out[46]:
array([[False, False, False],
[False, False, False]], dtype=bool)