我必須輸入形狀矩陣
m1: (n,3)
m2: (n,3)
我想將每一行(每個 n 大小為 3)與其對應的另一個矩陣相乘,這樣我就得到了(3,3)每一行的矩陣。
當我試圖只使用例如m1[0]@m2.T[0]操作不起作用時,因為m[0]提供了一個(3,)串列而不是(3,1)矩陣,我可以在其上使用矩陣操作。
是否有一種相對簡單或優雅的方法來獲得(3,1)矩陣乘法所需的矩陣?
uj5u.com熱心網友回復:
正如您所注意到的,默認情況下,numpy 擺脫了單例維度。
您可以使用np.newaxis(或等效地None。這是一個實作細節,但也適用于 pytorch)作為第二個軸來告訴 numpy “發明”一個新軸。
import numpy as np
a = np.ones((3,3))
a[1].shape # this is (3,)
a[1,:].shape # this is (3,)
a[1][...,np.newaxis].shape # this is (3,1)
但是,您也可以直接使用dotor outer:
>>> a = np.eye(3)
>>> np.outer(a[1], a[1])
array([[0., 0., 0.],
[0., 1., 0.],
[0., 0., 0.]])
>>> np.dot(a[1], a[1])
1.0
uj5u.com熱心網友回復:
一般來說,我建議將np.einsum其用于大多數矩陣運算,因為它非常優雅。m1要獲得包含在和m2形狀中的向量的逐行外積,(n, 3)您可以執行以下操作:
import numpy as np
m1 = np.array([1, 2, 3]).reshape(1, 3)
m2 = np.array([1, 2, 3]).reshape(1, 3)
result = np.einsum("ni, nj -> nij", m1, m2)
print(result)
>>>array([[[1, 2, 3],
[2, 4, 6],
[3, 6, 9]]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414377.html
標籤:
