Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算;克罗内克产品“;一个向量和一个矩阵的numpy_Python_Numpy - Fatal编程技术网

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)