2011-09-10 15 views

Odpowiedz

31

W uzupełnieniu do innych odpowiedzi, można użyć również krojenie z numpy.newaxis:

>>> from numpy import zeros, newaxis 
>>> a = zeros((6, 8)) 
>>> a.shape 
(6, 8) 
>>> b = a[:, :, newaxis] 
>>> b.shape 
(6, 8, 1) 

lub nawet ten (który będzie współpracować z dowolnej liczbie wymiarów):

>>> b = a[..., newaxis] 
>>> b.shape 
(6, 8, 1) 
+5

Na marginesie, "numpy.newaxis" jest po prostu "Brak". 'newaxis' jest" tylko "dla czytelności. Jest to równoważne po prostu 'b = a [..., None]' (elipsa pozwala również na pracę dla macierzy N-wymiarowych, nie tylko na tablicach 2D.) –

+1

Prawda. Z jakiegoś powodu odniosłem wrażenie, że "newaxis" oznaczające "Brak" było jedynie szczegółem implementacji (i dlatego może podlegać zmianom w przyszłości), ale wygląda na to, że zostało to wyraźnie udokumentowane. –

+0

Załóżmy, że chcesz, aby trzecia oś była czymś innym niż 1? na przykład jak przekonwertować 'a' na' b' z 'b.shape = (6,8,3)'? – Gathide

2
import numpy as np 

a= np.eye(3) 
print a.shape 
b = a.reshape(3,3,1) 
print b.shape 
6
numpy.reshape(array, array.shape + (1,)) 
+0

Dzięki, użyłem A = A.reshape (A.shape + (1,)) – nobody

+2

Jeśli chcesz zmodyfikować 'A' na miejscu, możesz po prostu przypisać do atrybut kształtu: 'A.shape = A.shape + (1,)', lub nawet 'A.shape + = 1,'. –

Powiązane problemy