W Pythonie, w jaki sposób mogę utworzyć tablicę liczb dowolnych o dowolnym kształcie wypełnioną wszystkimi Prawdą lub Wszystkimi False?
W Pythonie, w jaki sposób mogę utworzyć tablicę liczb dowolnych o dowolnym kształcie wypełnioną wszystkimi Prawdą lub Wszystkimi False?
Odpowiedzi:
numpy już teraz pozwala bardzo łatwo tworzyć tablice wszystkich zer lub jedynek:
np. numpy.ones((2, 2))
lubnumpy.zeros((2, 2))
Ponieważ True
i False
są reprezentowane w Pythonie jako 1
i 0
, musimy tylko określić, że ta tablica powinna być logiczna przy użyciu opcjonalnego dtype
parametru 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 full
osią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 , full
automatycznie rzutuje wyniki dtype
na drugi parametr, więc możemy po prostu napisać:
numpy.full((2, 2), True)
a=np.ones((2,2))
po nim a.dtype=bool
NIE działa.
numpy.full((2,2), True, dtype=bool)
ones
i zeros
nie konstruują tablicy liczb całkowitych. Bezpośrednio budują tablicę booli.
numpy.full((2,2), True)
odpowiednikiem?
int 1
do bool True
.
ones
i zeros
, które tworzą tablice pełne odpowiednio zer i jedynek, przyjmują opcjonalny dtype
parametr:
>>> 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)
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 fill
samodzielnie:
>>> 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.zeros
lub np.ones
jak inni sugerują odpowiedzi.
Szybko sprawdziłem, czy są jakieś różnice między wersją np.full
a np.ones
wersją.
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.empty
do zainicjowania True
tablicy 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]]
>>> 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 (rozmiar, wartość skalarna, typ). Istnieją również inne argumenty, które można przekazać, w celu uzyskania dokumentacji na ten temat sprawdź https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html
np.full
- ponad rok temu!