2014-03-13 107 views
4

給定一個大小不等的陣列(n,)如何將它轉換爲大小爲(n,1)的numpy數組。在Numpy中處理N by 1矩陣

的原因是因爲我想乘矩陣numpy的大小(n,)的陣列和(,n)獲得(n,n)但是當我做:

numpy.dot(a,b.T) 

它說,你不能做到這一點。我知道作爲一個事實,轉移(n,)什麼都不做,所以它只是很好改變(n,)並使它們(n,1)並且一起避免這個問題。

+0

如果您想在這種情況下簡化與1D或2D輸入一起工作的內容,還可以查看'np.atleast_2d'。然而,atleast_2d會使它成爲一個行向量而不是列向量。如果你想讓一維數組成爲列向量(而2D是獨立的),你可以使用'np.column_stack([array])'或'np.c_ [array]'。 –

回答

2

使用reshape (-1,1)重塑(n,)(n,1),看到詳細的例子:

In [1]: 

import numpy as np 
A=np.random.random(10) 
In [2]: 

A.shape 
Out[2]: 
(10,) 
In [3]: 

A1=A.reshape(-1,1) 
In [4]: 

A1.shape 
Out[4]: 
(10, 1) 
In [5]: 

A.T 
Out[5]: 
array([ 0.6014423 , 0.51400033, 0.95006413, 0.54321892, 0.2150995 , 
     0.09486603, 0.54560678, 0.58036358, 0.99914564, 0.09245124]) 
In [6]: 

A1.T 
Out[6]: 
array([[ 0.6014423 , 0.51400033, 0.95006413, 0.54321892, 0.2150995 , 
     0.09486603, 0.54560678, 0.58036358, 0.99914564, 0.09245124]]) 
+0

對於任意(n乘k)numpy數組,這將會是什麼(reshape(-1,1))?我只是非常討厭把插入代碼當作特殊情況來處理(n乘1),只是cuz numpy所做的。 – Pinocchio

+0

你是否介意在口頭上解釋你的解決方案呢? (它看起來很有效,但你是如何知道這麼做的)? – Pinocchio

+0

對於一個'(n,k)'數組,它將被重構成'(n * k,1)'。 –

4

您可以使用None對於要被視爲退化維度。

a = np.asarray([1,2,3]) 
a[:] 
a[:, None] 

In [48]: a 
Out[48]: array([1, 2, 3]) 

In [49]: a[:] 
Out[49]: array([1, 2, 3]) 

In [50]: a[:, None] 
Out[50]: 
array([[1], 
     [2], 
     [3]]) 
+0

所以a [:,None]使它成爲一個大小爲(n乘1)的列向量?這意味着什麼退化? – Pinocchio

+0

單一維度不包含數據,但需要爲調整目的而存在。有設施可以使它具有任意的尺寸爲0的尺寸。 – ely