首页 文章

Row.T *矩阵的行点积

提问于
浏览
0

我正在寻找一种更快,更优雅的方式来计算以下内容:
我有一个矩阵A,我想计算A的行方点积.Herby我想计算Ai.T * Ai,其中索引i表示矩阵A的第i行 .

import numpy as np
A=np.arange(40).reshape(20,2)
sol=[np.dot(A[ii,:].reshape(1,2).T,A[ii,:].reshape(1,2)) for ii in range(20)]

这导致形状矩阵 np.shape(sol) #=(20,2,2)
我已经看过 np.einsum ,但到目前为止无法使它工作 .
如果只存在一个解决方案,其中所有20个2x2矩阵相加,这也没关系,因为我想总结它到底:)

谢谢

1 回答

  • 2

    使用 np.dot -

    A.T.dot(A)
    

    使用 np.einsum -

    np.einsum('ij,ik->jk',A,A)
    

    样品运行 -

    >>> A=np.arange(40).reshape(20,2)
    >>> sol=[np.dot(A[ii,:].reshape(1,2).T,A[ii,:].reshape(1,2)) for ii in range(20)]
    >>> sol = np.array(sol)
    >>> sol.sum(0)
    array([[ 9880, 10260],
           [10260, 10660]])
    >>> A.T.dot(A)
    array([[ 9880, 10260],
           [10260, 10660]])
    >>> np.einsum('ij,ik->jk',A,A)
    array([[ 9880, 10260],
           [10260, 10660]])
    

    如果结果必须是 20 元素数组,我想你需要 -

    np.einsum('ij,ik->i',A,A)
    

相关问题