web-dev-qa-db-fra.com

Comment créer un tableau numpy de tous les vrais ou tous les faux?

En Python, comment créer un tableau numpy de formes arbitraires contenant tous les vrais ou tous les faux?

172
Michael Currie

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)

245
Michael Currie
numpy.full((2,2), True, dtype=bool)
83
fmonegaglia

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)
27
user2357112

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.

10
MSeifert
>>> 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

0
nikithashr

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]]
0
Joschua

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)
0
kmario23