簡體   English   中英

numpy矩陣乘法逐行

[英]numpy matrix multiplication row-wise

我有一個矩陣,像

a = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]])

我想獲得一個新的矩陣,其中每個元素都是a行與其自身的矩陣乘積:

np.array([
    np.dot(np.array([a[0]]).T, np.array([a[0]])),
    np.dot(np.array([a[1]]).T, np.array([a[1]])),
    np.dot(np.array([a[2]]).T, np.array([a[2]])),
    np.dot(np.array([a[3]]).T, np.array([a[3]])),
])

它將是一個4x4矩陣,每個元素是一個3x3矩陣。 之后,我可以在0軸上求和以獲得新的3x3矩陣。

除了使用循環,還有其他更優雅的方法來實現這一點嗎?

使用NumPy broadcasting保持第一個軸對齊,並在第二個軸之間執行外積-

a[:,:,None]*a[:,None,:] # or a[...,None]*a[:,None]

使用np.einsum ,轉換為-

np.einsum('ij,ik->ijk',a,a)

我可能會丟失一些東西,但這不只是矩陣乘法嗎?

>>> a.T @ a
array([[30, 40, 50],
       [40, 54, 68],
       [50, 68, 86]])

>>> np.sum(np.array([
      np.dot(np.array([a[0]]).T, np.array([a[0]])),
      np.dot(np.array([a[1]]).T, np.array([a[1]])),
      np.dot(np.array([a[2]]).T, np.array([a[2]])),
      np.dot(np.array([a[3]]).T, np.array([a[3]])),
    ]), axis=0)
array([[30, 40, 50],
       [40, 54, 68],
       [50, 68, 86]])

暫無
暫無

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

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