it-swarm.com.de

Wie erstelle ich ein numpy-Array von all True oder all False?

Wie erstelle ich in Python ein numpy-Array mit einer beliebigen Form, die mit "Wahr" oder "Falsch" gefüllt ist?

172
Michael Currie

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)

245
Michael Currie
numpy.full((2,2), True, dtype=bool)
83
fmonegaglia

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)
27
user2357112

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.

10
MSeifert
>>> 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

0
nikithashr

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]]
0
Joschua

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)
0
kmario23