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 Trueund Falsesind in Python dargestellt , wie 1und 0jeweils haben wir nur dieses Array angeben sollte boolean die optional mit dtypeParametern 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 fulldas 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 , fullwirft automatisch Ergebnisse der dtypevon dem zweiten Parameter, so können wir nur schreiben:
numpy.full((2, 2), True)
a=np.ones((2,2))gefolgt von a.dtype=boolNICHT funktioniert.
numpy.full((2,2), True, dtype=bool)
onesund zerosAntworten bilden kein Array von ganzen Zahlen. Sie bauen direkt eine Reihe von Bools.
numpy.full((2,2), True)ein Äquivalent?
int 1zu konvertieren bool True.
onesund zeros, die Arrays voller Einsen bzw. Nullen erstellen, nehmen einen optionalen dtypeParameter 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 filles 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.zerosoder np.oneswie die anderen Antworten vorschlagen.
Schnell lief eine Zeit, um zu sehen, ob es Unterschiede zwischen der np.fullund np.onesVersion 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- TrueArray 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!