【问题标题】:How to calculate "Kronecker Product" of a vector and a matrix with numpy如何用 numpy 计算向量和矩阵的“克罗内克积”
【发布时间】:2020-06-24 00:53:18
【问题描述】:

我需要计算以下公式:

TeX 中的公式:

$\sum_n^N \sum_m^N a_n * a_m * C_{nm}$

伪代码:

a = array of length N
C = NxN matrix
retval = 0
for n in range(N):
    for m in range(N):
         retval += a[n] * a[m] * C[n][m]

如果a 是按上述乘积构造的NxN 矩阵,则可以简单地使用np.kron 进行克罗内克矩阵乘法,然后使用np.sum 来获得所需的结果。但是,我不知道一种更快的 numpy 方法来构建矩阵 A,如上面的公式。

有什么想法吗?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我们可以直接将这些迭代器用于np.einsum string-notation -

    retval = np.einsum('n,m,nm->',a,a,C)
    

    或者,np.dot -

    retval = a.dot(C).dot(a)
    

    【讨论】:

    • 哇,感谢您的快速回答。你知道这两个哪个更快吗?应该是np.dot吧?
    • @jaaq 认为这取决于数组大小。你能测试一下你的用例吗?
    • 时间为:Naive for loops: 6m35sdot method: 4m10seinsum: 4m4s
    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2022-09-23
    • 2011-06-23
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多