2013-03-27 79 views
6

假設我創建了一個2維數組形陣列蟒

m = np.random.normal(0, 1, size=(1000, 2)) 
q = np.zeros(shape=(1000,1)) 
print m[:,0] -q 

當我拿m[:,0].shape我得到(1000,),而不是(1000,1)這是我想要的。我如何強制m[:,0](1000,1)陣列?

+0

我只想要一個1000行的列向量,因爲我試圖減去兩列向量 – lord12 2013-03-27 20:16:33

+0

我認爲'(1000,)'和'(1000,1)' – MattDMo 2013-03-27 20:19:40

+1

@MattDMo是一樣的:他們有時候因爲廣播的工作原理可以互換,但它們並不完全相同。 – DSM 2013-03-27 20:20:38

回答

7

通過特別選擇第0列,因爲你已經注意到了,你降維:

>>> m = np.random.normal(0, 1, size=(5, 2)) 
>>> m[:,0].shape 
(5,) 

你有很多的選擇,得到一個5X1的對象回來。您可以索引使用列表,而不是一個整數:

>>> m[:, [0]].shape 
(5, 1) 

你可以要求「所有列直到但不包括1」:

>>> m[:,:1].shape 
(5, 1) 

或者你可以使用None(或np.newaxis ),這是一個普遍的把戲延長尺寸:

>>> m[:,0,None].shape 
(5, 1) 
>>> m[:,0][:,None].shape 
(5, 1) 
>>> m[:,0, None, None].shape 
(5, 1, 1) 

最後,你可以重塑:

>>> m[:,0].reshape(5,1).shape 
(5, 1) 

但我會用這種情況下的其他方法之一。

+2

只需要注意,使用'm [:,[0]]'是微妙的不同的,因爲它觸發了奇特的索引,這意味着結果不是一個觀點。 – seberg 2013-03-27 20:29:43

+0

@seberg:夠了。我很幸運,無論是在記憶還是在表現方面,我都很少擔心,所以我可能會變得有些sl ..。 – DSM 2013-03-27 20:32:11