簡體   English   中英

將 numpy 數組從 (2,) 重塑為 (2,1) 的效果

[英]Effect of reshaping an numpy array from (2,) to (2,1)

我試圖通過python中的點積計算2個數組ab的協方差矩陣,公式為a @ bT

打印形狀時,我的輸入數組的初始形式是(2,) 顯然,這個計算的結果是一個單一的標量,而不是我需要的協方差矩陣。
事實證明,我需要對數組進行a.reshape(2,1) (即a.reshape(2,1) )以接收所需的(2,2)協方差矩陣。

現在我的問題是我不明白數組的重塑對數據有什么影響,更具體地說,為什么允許我這樣做並接收我想要的結果。
為什么我可以重塑數組以接收協方差矩陣,它背后的思考過程是什么?
我確實了解點積是如何工作的,但正如我所說,我不明白為什么我只能重塑數組以接收所需的結果維度。

我希望我讓我的問題可以理解,我在制定它時遇到了一些麻煩。

感謝任何幫助!

雖然reshape不會改變數組的值,但它會影響數組與其他數組的交互方式。 *@這樣的運算符有處理各種形狀數組的規則。

In [221]: a, b = np.array([1,2]), np.array([3,4])
In [222]: a,b
Out[222]: (array([1, 2]), array([3, 4]))

一維數組的transpose沒有任何改變。 它不會“添加”維度; 它只是顛倒了現有的尺寸:

In [223]: b.T
Out[223]: array([3, 4])

對於一matmul數組, matmuldot做“標量”或“點”積。 這清楚地記錄在案:

In [224]: a@(b.T)
Out[224]: 11

將數組重塑為(2,1) 現在轉置確實有所作為:

In [225]: a[:,None]
Out[225]: 
array([[1],
       [2]])
In [226]: b[:,None].T
Out[226]: array([[3, 4]])

這里我們有一個 (2,1) 和 (1,2),它做矩陣乘積,對大小為 1 的維度求和。 結果是 (2,2)。 再次明確記錄。

In [227]: a[:,None]@b[:,None].T
Out[227]: 
array([[3, 4],
       [6, 8]])

獲得該產品的其他方式:

In [228]: np.outer(a,b)
Out[228]: 
array([[3, 4],
       [6, 8]])
In [229]: a[:,None]*b
Out[229]: 
array([[3, 4],
       [6, 8]])

最后一種情況是 (2,1) 與 (2,) 的元素乘法。 broadcasting規則適用。 仔細閱讀!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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