Jak stworzyć tablicę numpy wszystkich Prawd lub wszystkich False?


Odpowiedzi:


281

numpy już teraz pozwala bardzo łatwo tworzyć tablice wszystkich zer lub jedynek:

np. numpy.ones((2, 2))lubnumpy.zeros((2, 2))

Ponieważ Truei Falsesą reprezentowane w Pythonie jako 1i 0, musimy tylko określić, że ta tablica powinna być logiczna przy użyciu opcjonalnego dtypeparametru i gotowe.

numpy.ones((2, 2), dtype=bool)

zwroty:

array([[ True,  True],
       [ True,  True]], dtype=bool)

AKTUALIZACJA: 30 października 2013 r

Od wersji 1.8 Numpy możemy fullosiągnąć ten sam wynik dzięki składni, która lepiej pokazuje nasze zamiary (jak wskazuje fmonegaglia):

numpy.full((2, 2), True, dtype=bool)

AKTUALIZACJA: 16 stycznia 2017 r

Od wersji co najmniej numpy 1.12 , fullautomatycznie rzutuje wyniki dtypena drugi parametr, więc możemy po prostu napisać:

numpy.full((2, 2), True)


37
Czy odpowiedziałeś na własne pytanie w tej samej minucie, w której zostało zadane pytanie?
M4rtini,

26
@ M4rtini SO umożliwia jednoczesne opublikowanie pytania i odpowiedzi na pytanie.
Mick MacCallum

1
Zainicjowana tablica dtype = int nie może być używana do wyboru elementu tablicy.
Jichao

1
To działa. Bądź jednak ostrożny, ponieważ jak mówi @Jichao, a=np.ones((2,2))po nim a.dtype=boolNIE działa.
medley56

8
Teraz sławny mem: devhumor.com/media/…
WLGfx

93
numpy.full((2,2), True, dtype=bool)

12
+1 Myślę, że to powinna być zaakceptowana odpowiedź. Bardziej naturalne wydaje się wypełnienie tablicy boolami niż wypełnienie liczbami, aby przelać je na boole.
Zelphir Kaltstahl 18.04.16

5
Odpowiedzi onesi zerosnie konstruują tablicy liczb całkowitych. Bezpośrednio budują tablicę booli.
user2357112 obsługuje Monicę

1
Jest numpy.full((2,2), True)odpowiednikiem?
Pavel

Jest w numpy 1.12+. Nie pamiętam, czy dotyczy to również poprzednich wersji
fmonegaglia,

Surly dtype jest przechowywany oddzielnie od samych danych, jeśli to możliwe? Nie mogę sobie wyobrazić numpy robi żadnego podnoszenia ciężkich konwersji int 1do bool True.
BallpointBen,

30

onesi zeros, które tworzą tablice pełne odpowiednio zer i jedynek, przyjmują opcjonalny dtypeparametr:

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

10

Jeśli nie musi być zapisywalny, możesz utworzyć taką tablicę za pomocą 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)

Jeśli potrzebujesz zapisu, możesz także utworzyć pustą tablicę i fillsamodzielnie:

>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]], dtype=bool)

Te podejścia są tylko alternatywnymi sugestiami. W ogóle należy trzymać się z np.full, np.zeroslub np.onesjak inni sugerują odpowiedzi.


3

Szybko sprawdziłem, czy są jakieś różnice między wersją np.fulla np.oneswersją.

Odpowiedź: Nie

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")

Wynik:

np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s


WAŻNY

Jeśli chodzi o post o np.empty(i nie mogę komentować, ponieważ moja reputacja jest zbyt niska):

NIE Rób tego. NIE UŻYWAJ np.emptydo zainicjowania Truetablicy all- array

Ponieważ tablica jest pusta, pamięć nie jest zapisywana i nie ma gwarancji, jakie będą twoje wartości, np

>>> print(np.empty((4,4), dtype=bool))
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True False False]]

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.