Python numpy矩阵行乘法

Python numpy矩阵行乘法,python,numpy,matrix,multiplication,Python,Numpy,Matrix,Multiplication,我有一个矩阵,比如 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

我有一个矩阵,比如

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矩阵

除了使用循环,还有什么更优雅的方法来实现这一点吗?

用于保持第一个轴对齐,并在第二个轴之间执行外积-

a[:,:,None]*a[:,None,:] # or a[...,None]*a[:,None]
用,翻译成-

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]])

如果你看到我删除的答案,我已经走了一半了!下次我会答对的,谢谢你的回答。:)@Cᴏʟᴅsᴘᴇᴇᴅ 是的,你很接近!:)非常感谢!!我试过了,这正是我想要的。想不到广播可以这样做。我点击了复选标记,可以吗?顺便说一句:如果我有另一个长度为4的一维数组,如何将这个一维数组与上面得到的数组相乘?我知道了。AA*b[:,无,无]可以@DivakarHi percusse,谢谢你的评论,但不,它们不一样。我在计算类似于[1,2,3].T*[1,2,3]=[1,2,3],[2,4,6],[3,6,9]],但你在计算的是[1,2,3]*[1,2,3].T=[14]。@JQK我刚刚复制了你的代码并比较了结果。是的,你似乎是正确的,但我还没有时间检查它。。谢谢你的帮助。对不起,我记得。当我昨天做的时候,我需要用矩阵乘以一些权重,然后求和。可以将权重移动到原始数组中,然后使用矩阵乘法方法。无论如何,谢谢你的帮助。