Python 如何计算;克罗内克产品“;一个向量和一个矩阵的numpy
我需要计算以下公式: 以特克斯表示的弗罗姆拉:Python 如何计算;克罗内克产品“;一个向量和一个矩阵的numpy,python,numpy,Python,Numpy,我需要计算以下公式: 以特克斯表示的弗罗姆拉: $\sum_n^N \sum_m^N a_n * a_m * C_{nm}$ 佩多科德: a=长度为N的数组 C=NxN矩阵 retval=0 对于范围内的n(n): 对于范围内的m(N): retval+=a[n]*a[m]*C[n][m] 如果a是按照上述乘积构造的NxN矩阵,则可以简单地使用np.kron进行Kronecker矩阵乘法,然后使用np.sum获得所需结果。然而,我不知道有什么更快的方法可以像上面的公式那样构造矩阵a 有什么想
$\sum_n^N \sum_m^N a_n * a_m * C_{nm}$
佩多科德:
a=长度为N的数组
C=NxN矩阵
retval=0
对于范围内的n(n):
对于范围内的m(N):
retval+=a[n]*a[m]*C[n][m]
如果a
是按照上述乘积构造的NxN矩阵,则可以简单地使用np.kron
进行Kronecker矩阵乘法,然后使用np.sum
获得所需结果。然而,我不知道有什么更快的方法可以像上面的公式那样构造矩阵a
有什么想法吗?我们可以直接将这些迭代器用于字符串表示法-
retval = np.einsum('n,m,nm->',a,a,C)
或者,与-
哇,谢谢你的快速回答。你知道这两个中哪一个更快吗?可能
np.dot
对吧?@jaaq认为这取决于数组大小。你能在你的用例上进行测试吗?时间是:Naive for循环:6m35s
dot方法:4m10s
einsum:4m4s
retval = a.dot(C).dot(a)