En Python, comment puis-je créer un tableau numpy de forme arbitraire rempli avec tous les vrais ou tous les faux?
En Python, comment puis-je créer un tableau numpy de forme arbitraire rempli avec tous les vrais ou tous les faux?
Réponses:
numpy permet déjà la création de tableaux de tous les uns ou de tous les zéros très facilement:
par exemple numpy.ones((2, 2))
ounumpy.zeros((2, 2))
Puisque True
et False
sont représentés en Python comme 1
et 0
, respectivement, nous n'avons qu'à spécifier que ce tableau doit être booléen en utilisant le dtype
paramètre facultatif et nous avons terminé.
numpy.ones((2, 2), dtype=bool)
Retour:
array([[ True, True],
[ True, True]], dtype=bool)
MISE À JOUR: 30 octobre 2013
Depuis la version 1.8 de numpy , nous pouvons utiliser full
pour obtenir le même résultat avec une syntaxe qui montre plus clairement notre intention (comme le souligne fmonegaglia):
numpy.full((2, 2), True, dtype=bool)
MISE À JOUR: 16 janvier 2017
Depuis au moins la version numpy 1.12 , full
lance automatiquement les résultats vers dtype
le deuxième paramètre, nous pouvons donc simplement écrire:
numpy.full((2, 2), True)
a=np.ones((2,2))
suivi de a.dtype=bool
ne fonctionne PAS.
numpy.full((2,2), True, dtype=bool)
ones
et zeros
ne construisent pas un tableau d'entiers. Ils construisent directement un tableau de booléens.
numpy.full((2,2), True)
un équivalent?
int 1
à bool True
.
ones
et zeros
, qui créent des tableaux remplis respectivement de uns et de zéros, prennent un dtype
paramètre facultatif :
>>> 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 n'a pas besoin d'être accessible en écriture, 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 le créer 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.
Exécuté rapidement un timeit pour voir s'il y a des différences entre la version 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
Concernant le post sur np.empty
(et je ne peux pas commenter, car ma réputation est trop basse):
NE FAITES PAS CELA. NE PAS UTILISER np.empty
pour initialiser un True
tableau complet
Comme le tableau est vide, la mémoire n'est pas écrite et il n'y a aucune garantie, quelles seront 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]]
>>> 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, consultez https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
np.full
- il y a plus d'un an!