2013-07-25 17 views
17

Mam pytanie dotyczące konwersji między macierzami wymiarowymi (N), a macierzami wymiarów (N, 1). Na przykład y jest wymiarem (2,).Wymiar Numpy Vector (N, 1) -> (N,) wymiarowanie

A=np.array([[1,2],[3,4]]) 

x=np.array([1,2]) 

y=np.dot(A,x) 

y.shape 
Out[6]: (2,) 

Ale poniżej pokaże się y2, aby być (2,1) wymiarem.

x2=x[:,np.newaxis] 

y2=np.dot(A,x2) 

y2.shape 
Out[14]: (2, 1) 

Jaki byłby najskuteczniejszy sposób konwersji y2 z powrotem na y bez kopiowania?

Dzięki, Tom

Odpowiedz

16

reshape prace w tym

a = np.arange(3)  # a.shape = (3,) 
b = a.reshape((3,1)) # b.shape = (3,1) 
b2 = a.reshape((-1,1)) # b2.shape = (3,1) 
c = b.reshape((3,))  # c.shape = (3,) 
c2 = b.reshape((-1,)) # c2.shape = (3,) 

Zauważ też, że reshape nie kopiuje dane, chyba że potrzebuje nowego kształtu (które nie musi tutaj robić):

a.__array_interface__['data'] # (22356720, False) 
b.__array_interface__['data'] # (22356720, False) 
c.__array_interface__['data'] # (22356720, False) 
1

Kawałek wzdłuż wymiaru chcesz, tak jak w poniższym przykładzie. Aby przejść w przeciwnym kierunku, można użyć None jako plastra dla dowolnego wymiaru, który powinien być traktowany jako wymiar singletonowy, ale który jest potrzebny do tworzenia kształtów.

In [786]: yy = np.asarray([[11],[7]]) 

In [787]: yy 
Out[787]: 
array([[11], 
     [7]]) 

In [788]: yy.shape 
Out[788]: (2, 1) 

In [789]: yy[:,0] 
Out[789]: array([11, 7]) 

In [790]: yy[:,0].shape 
Out[790]: (2,) 

In [791]: y1 = yy[:,0] 

In [792]: y1.shape 
Out[792]: (2,) 

In [793]: y1[:,None] 
Out[793]: 
array([[11], 
     [7]]) 

In [794]: y1[:,None].shape 
Out[794]: (2, 1) 

Alternatywnie, można użyć reshape:

In [795]: yy.reshape((2,)) 
Out[795]: array([11, 7]) 
0

tłumaczenie naprzeciwko może być wykonana przez:

np.atleast_2d(y).T 
4

użytkowania numpy.squeeze:

>>> x = np.array([[[0], [1], [2]]]) 
>>> x.shape 
(1, 3, 1) 
>>> np.squeeze(x).shape 
(3,) 
>>> np.squeeze(x, axis=(2,)).shape 
(1, 3) 
+1

Wygląda jakby ktoś przyszedł przez i downvoted nieprzetłumaczone akceptowane odpowiedzi bez pozostawienia żadnych komentarzy. Prawdopodobnie troll. – ely

Powiązane problemy