Wie erstelle ich in Python ein numpy-Array beliebiger Form, das mit allen Wahren oder allen Falschen gefüllt ist?
Wie erstelle ich in Python ein numpy-Array beliebiger Form, das mit allen Wahren oder allen Falschen gefüllt ist?
Antworten:
Mit numpy können bereits sehr einfach Arrays mit allen Einsen oder Nullen erstellt werden:
zB numpy.ones((2, 2))
odernumpy.zeros((2, 2))
Da True
und False
sind in Python dargestellt , wie 1
und 0
jeweils haben wir nur dieses Array angeben sollte boolean die optional mit dtype
Parametern 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
das gleiche Ergebnis mit einer Syntax erzielen, die unsere Absicht deutlicher zeigt (wie fmonegaglia hervorhebt):
numpy.full((2, 2), True, dtype=bool)
UPDATE: 16. Januar 2017
Da mindestens numpy Version 1.12 , full
wirft automatisch Ergebnisse der dtype
von dem zweiten Parameter, so können wir nur schreiben:
numpy.full((2, 2), True)
a=np.ones((2,2))
gefolgt von a.dtype=bool
NICHT funktioniert.
numpy.full((2,2), True, dtype=bool)
ones
und zeros
Antworten bilden kein Array von ganzen Zahlen. Sie bauen direkt eine Reihe von Bools.
numpy.full((2,2), True)
ein Äquivalent?
int 1
zu konvertieren bool True
.
ones
und zeros
, die Arrays voller Einsen bzw. Nullen erstellen, nehmen einen optionalen dtype
Parameter an:
>>> 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 erstellen mit 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)
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 dabei bleiben np.full
, np.zeros
oder np.ones
wie die anderen Antworten vorschlagen.
Schnell lief eine Zeit, um zu sehen, ob es Unterschiede zwischen der np.full
und np.ones
Version gibt.
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. NICHT VERWENDEN np.empty
, um ein All- True
Array zu initialisieren
Da das Array leer ist, wird der Speicher nicht geschrieben und es gibt keine Garantie dafür, 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]]
>>> 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. Eine Dokumentation hierzu finden Sie unter https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
np.full
- vor mehr als einem Jahr!