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.