![](/img/trans.png)
[英]Turning a 6 value 1 dimensional numpy.ndarray into a 6 dimensional
[英]turning a list of numpy.ndarray to a matrix in order to perform multiplication
我有這種形式的載體:
test=np.linspace(0,1,10)
我想將它們水平堆疊以形成矩陣。 問題是我在一個循環中定義它們,因此第一個堆棧在空矩陣和第一列向量之間,從而產生以下錯誤:
ValueError: all the input arrays must have same number of dimensions
底線-我有一個for循環,每次迭代都會創建一個向量p1,我想將其添加到以下形式的最終矩陣中:[p1 p2 p3 p4]然后我可以對其進行矩陣運算,例如乘以轉置等等
如果您有要水平堆疊的一維數組的列表,可以先將它們全部轉換為列,但是垂直堆疊然后轉置可能會更容易:
In [6]: vector_list = [np.linspace(0, 1, 10) for _ in range(3)]
In [7]: np.vstack(vector_list).T
Out[7]:
array([[0. , 0. , 0. ],
[0.11111111, 0.11111111, 0.11111111],
[0.22222222, 0.22222222, 0.22222222],
[0.33333333, 0.33333333, 0.33333333],
[0.44444444, 0.44444444, 0.44444444],
[0.55555556, 0.55555556, 0.55555556],
[0.66666667, 0.66666667, 0.66666667],
[0.77777778, 0.77777778, 0.77777778],
[0.88888889, 0.88888889, 0.88888889],
[1. , 1. , 1. ]])
您是怎么得到這個尺寸錯誤的? empty array
與它有什么關系?
相同長度的數組列表:
In [610]: alist = [np.linspace(0,1,6), np.linspace(10,11,6)]
In [611]: alist
Out[611]:
[array([0. , 0.2, 0.4, 0.6, 0.8, 1. ]),
array([10. , 10.2, 10.4, 10.6, 10.8, 11. ])]
用它們制作數組的幾種方法:
In [612]: np.array(alist)
Out[612]:
array([[ 0. , 0.2, 0.4, 0.6, 0.8, 1. ],
[10. , 10.2, 10.4, 10.6, 10.8, 11. ]])
In [614]: np.stack(alist)
Out[614]:
array([[ 0. , 0.2, 0.4, 0.6, 0.8, 1. ],
[10. , 10.2, 10.4, 10.6, 10.8, 11. ]])
如果要在列中加入它們,可以轉置上述之一,或使用:
In [615]: np.stack(alist, axis=1)
Out[615]:
array([[ 0. , 10. ],
[ 0.2, 10.2],
[ 0.4, 10.4],
[ 0.6, 10.6],
[ 0.8, 10.8],
[ 1. , 11. ]])
np.column_stack
也很方便。
在較新的numpy版本中,您可以執行以下操作:
In [617]: np.linspace((0,10),(1,11),6)
Out[617]:
array([[ 0. , 10. ],
[ 0.2, 10.2],
[ 0.4, 10.4],
[ 0.6, 10.6],
[ 0.8, 10.8],
[ 1. , 11. ]])
您沒有指定如何創建“空數組”以及如何嘗試堆疊。 我無法完全重新創建錯誤消息(完全回溯會有所幫助)。 但是鑒於該消息,您是否檢查了輸入的維數? 他們匹配嗎?
循環中的數組堆疊非常棘手。 您必須密切注意形狀,尤其是初始“空”數組的形狀。 沒有一個類似於空列表[]
模擬。 np.array([])
為1d,形狀為(1,)。 np.empty((0,6))
是形狀為(0,6)的2d。 同樣,所有堆棧函數都會在每次調用時創建一個新數組(無法就地操作),因此它們效率低下(與列表追加相比)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.