2015-11-02 166 views
3

將矢量轉換爲二維數組的最佳方式是什麼?將NumPy矢量轉換爲二維數組/矩陣

例如,大小的矢量b(10,)

a = rand(10,10) 
b = a[1, :] 
b.shape 

Out: (10L,) 

可以作爲

b = b.reshape(len(b), 1) 

轉換爲大小(10,1)的陣列是否有一個更簡潔的方式來做它?

+2

'(10,1)'是一個二維數組。 – hpaulj

+0

@hpaulj我猜OP意味着「將1d numpy數組轉換爲列向量」... –

+1

在http://stackoverflow.com/questions/28385666/numpy-use-reshape-or-newaxis-to-add-dimensions比較和對比'重塑'和'新軸'。 – hpaulj

回答

3

使用np.newaxis

In [139]: b.shape 
Out[139]: (10,) 

In [140]: b=b[:,np.newaxis] 

In [142]: b.shape 
Out[142]: (10, 1) 
+0

請考慮編輯您的帖子以添加更多關於您的代碼的解釋以及爲什麼它可以解決問題。一個主要包含代碼的答案(即使它正在工作)通常不會幫助OP瞭解他們的問題。 – SuperBiasedMan

+0

@SuperBiasedMan - OP不要求理解,只是一個更簡潔的表達式。我不確定可以再解釋OP的「重塑」版本。這是'np.newaxis'變量的基本用法。 – hpaulj

+1

@SuperBiasedMan我同意,代碼只回答**通常**不會幫助。但正如hpaulj所說:這裏沒有太多的解釋,上面的三個命令是不言自明的。 (看看我的其他答案,我總是試圖解釋我的答案,如果有必要的話)。 –

7

既然你a[1, :]索引時失去了尺寸,丟失的維度需要被更換,以保持二維形狀。考慮到這一點,你可以使用語法進行選擇:

b = a[1, :, None] 

然後b具有所需形狀(10,1)。需要注意的是None相同np.newaxis並插入長度的新軸1

(這是同樣的事情,寫作b = a[1, :][:, None]但只使用一個索引操作,從而節省了幾微秒)。

如果您想繼續使用reshape(這也是精於此目的),這是值得記住的是,你可以使用-1(最多),一個軸具有與NumPy找出正確的長度應該是什麼,而不是:

b.reshape(-1, 1) 
+0

我會補充說''.reshape'不是* inplace *操作,所以它應該是'b = b.reshape(-1,1)'或* inplace *版本'b.shape =(-1,1)'。 –