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 Trueet Falsesont représentés en Python comme 1et 0, respectivement, nous n'avons qu'à spécifier que ce tableau doit être booléen en utilisant le dtypeparamè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 fullpour 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 , fulllance automatiquement les résultats vers dtypele deuxième paramètre, nous pouvons donc simplement écrire:
numpy.full((2, 2), True)
a=np.ones((2,2))suivi de a.dtype=boolne fonctionne PAS.
numpy.full((2,2), True, dtype=bool)
oneset zerosne 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.
oneset zeros, qui créent des tableaux remplis respectivement de uns et de zéros, prennent un dtypeparamè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 fillvous-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.zerosou np.onescomme 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.fullet 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.emptypour initialiser un Truetableau 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!