[英]Convert NumPy vector to 2D array / matrix
將向量轉換為二維數組的最佳方法是什么?
例如,大小為 (10, ) 的向量 b
a = rand(10,10)
b = a[1, :]
b.shape
Out: (10L,)
可以轉換為大小為 (10,1) 的數組
b = b.reshape(len(b), 1)
有沒有更簡潔的方法來做到這一點?
由於使用a[1, :]
索引時會丟失一個維度,因此需要替換丟失的維度以保持 2D 形狀。 考慮到這一點,您可以使用以下語法進行選擇:
b = a[1, :, None]
然后b
具有所需的形狀 (10, 1)。 請注意, None
與np.newaxis
相同,並插入長度為 1 的新軸。
(這與寫b = a[1, :][:, None]
但只使用一個索引操作,因此節省了幾微秒。)
如果您想繼續使用reshape
(這也可以用於此目的),值得記住的是,您可以將 -1 用於(最多)一個軸,讓 NumPy 找出正確的長度應該是什么:
b.reshape(-1, 1)
使用np.newaxis
:
In [139]: b.shape
Out[139]: (10,)
In [140]: b=b[:,np.newaxis]
In [142]: b.shape
Out[142]: (10, 1)
我認為最清楚的方法是使用np.expand_dims
,它基本上向數組添加了一個軸。 如果您使用axis=-1
,則會添加一個新軸作為最后一個維度。
b = np.expand_dims(b, axis=-1)
或者如果你想讓我更簡潔:
b = np.expand_dims(b, -1)
你也可以使用 np.asmatrix(b)
a.shape #--> (12,)
np.asmatrix(a).shape #--> (1, 12)
np.asmatrix(a).T.shape #--> (12, 1)
雖然這個問題很老了,但我認為還是值得回答的。
使用這種風格:
b = a[1:2, :]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.