簡體   English   中英

將numpy.ndarray的列表轉換為矩陣以執行乘法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM