Wie erstelle ich in Python ein numpy-Array mit einer beliebigen Form, die mit "Wahr" oder "Falsch" gefüllt ist?
mit numpy können bereits sehr einfach Arrays aller Einsen oder aller Nullen erstellt werden:
z.B. numpy.ones((2, 2))
oder numpy.zeros((2, 2))
Da True
und False
in Python als 1
Bzw. 0
Dargestellt werden, müssen wir dies nur spezifizieren Das Array sollte mit dem optionalen Parameter dtype
boolesch sein, und wir sind fertig.
numpy.ones((2, 2), dtype=bool)
kehrt zurück:
array([[ True, True],
[ True, True]], dtype=bool)
UPDATE: 30. Oktober 2013
Seit numpy Version 1.8 können wir full
verwenden, um dasselbe Ergebnis mit einer Syntax zu erzielen, die unsere Absicht klarer zeigt (wie fmonegaglia betont):
numpy.full((2, 2), True, dtype=bool)
UPDATE: 16. Januar 2017
Da mindestens numpy Version 1.12 , full
die Ergebnisse automatisch in dtype
des zweiten Parameters umwandelt, können wir einfach schreiben:
numpy.full((2, 2), True)
numpy.full((2,2), True, dtype=bool)
ones
und zeros
, die Arrays mit Einsen bzw. Nullen erstellen, verwenden einen optionalen 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)
Wenn es nicht beschreibbar sein muss, können Sie ein solches Array mit np.broadcast_to
erstellen:
>>> import numpy as np
>>> np.broadcast_to(True, (2, 5))
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Wenn Sie es beschreibbar benötigen, können Sie auch ein leeres Array erstellen und fill
es selbst:
>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
Diese Ansätze sind nur alternative Vorschläge. Im Allgemeinen sollten Sie bei np.full
, np.zeros
Oder np.ones
Bleiben, wie in den anderen Antworten vorgeschlagen.
>>> 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 (Größe, Skalarwert, Typ). Es gibt auch andere Argumente, die übergeben werden können. Überprüfen Sie diesbezüglich https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
Lief schnell eine Zeit um zu sehen, ob es Unterschiede zwischen den np.full
und np.ones
Ausführung.
Antwort: Nein
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")
Ergebnis:
np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s
WICHTIG
In Bezug auf den Beitrag über np.empty
(und ich kann nicht kommentieren, da mein Ruf zu niedrig ist):
TUN SIE DAS NICHT. BENUTZEN SIE NICHT np.empty
, um ein all -True
-Array zu initialisieren
Da das Array leer ist, wird der Speicher nicht geschrieben und es gibt keine Garantie, wie hoch Ihre Werte sein werden, z.
>>> print(np.empty((4,4), dtype=bool))
[[ True True True True]
[ True True True True]
[ True True True True]
[ True True False False]]
Um weitere Antworten hinzuzufügen, haben wir hier eine andere Möglichkeit, ein boolesches Array mit willkürlicher Form zu generieren. Die Schritte sind selbsterklärend.
# 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)