2015-04-28 1 views
8

Chcę utworzyć czterowymiarową tablicę zer w pythonie. Wiem, jak to zrobić dla tablicy kwadratowej, ale chcę, aby listy miały różne długości.4 wymiarowa tablica zer w pytonie

Teraz używam to:

numpy.zeros((200,)*4) 

co daje im całą długość 200, ale chciałbym mieć długość 200,20,100,20 bo teraz mam dużo zer w moim tablicy, która nie używam

Odpowiedz

6

można użyć np.full:

>>> np.full((200,20,10,20), 0) 

numpy.full

Zwraca nową tablicę o określonym kształcie i typie, wypełnioną wartością fill_value.

przykład:

>>> np.full((1,3,2,4), 0) 
array([[[[ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.]], 

     [[ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.]], 

     [[ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.]]]]) 
4

można podać więcej niż jeden arg kształt:

kształt int lub sekwencja wskazówki kształt nowej tablicy, na przykład, (2, 3) lub 2.

In [26]: arr = np.zeros((200, 20, 10, 20)) 

In [27]: arr.shape 
Out[27]: (200, 20, 10, 20) 

Wydaje się również dużo bardziej efektywne, gdy masz duże wymiary.

In [43]: timeit arr = np.full((200, 100, 100, 100),0) 
1 loops, best of 3: 232 ms per loop 

In [44]: timeit arr = np.zeros((200, 100, 100, 100)) 
100000 loops, best of 3: 12.6 µs per loop 
In [45]: timeit arr = np.zeros((500, 100, 100, 100)) 
100000 loops, best of 3: 13.5 µs per loop  
In [46]: timeit arr = np.full((500, 100, 100, 100),0) 
1 loops, best of 3: 1.19 s per loop 
+1

Nie wiedziałem, że możesz przekazać argumenty do kształtowania. Dobrze wiedzieć. – Scott

0

Jak Python v 3.50, używając np.full powraca poleceń

FutureWarning: in the future, full((1, 3, 2, 4), 0) will return an array of dtype('int32').

Na tej podstawie podpiąłem odpowiedź @ Padriaca. Oba jednak działają na razie!