【问题标题】:numpy: efficient sum of kronecker productsnumpy:克罗内克积的有效总和
【发布时间】:2022-09-23 02:45:12
【问题描述】:
  • 我有三组矩阵 {A_i}、{B_i} 和 {C_i},每组有 n 个矩阵
  • A_i 的维度为 l x m,B_i 的维度为 m x o,C_i 的维度为 p x q
  • 我想计算以下内容:

这是我所追求的一个具体例子

A = np.arange(12).reshape(2,3,2)
B = np.arange(12,24).reshape(2,2,3)
C = np.arange(32).reshape(2,4,4)

result = np.zeros((12,12))
for i in range(2):
    result += np.kron(A[i,:,:] @ B[i,:,:], C[i,:,:])

我怎样才能更有效地实现这一点?

非常感谢您的帮助!

  • 你看过einsum吗?
  • 感谢您的建议!我看了看,想出了一些东西(见下文)。我们可以提高效率吗?

标签: numpy vectorization kronecker-product


【解决方案1】:

按照建议,我查看了numpy.einsum。事实证明这非常好。一个解决方案是:

np.einsum('ijk,imn->jmkn', np.einsum('ijk,ikm->ijm', A, B), C).reshape(A.shape[1] * C.shape[1], B.shape[2] * C.shape[2])
  • 内部np.einsum() 生成AB 的2d“切片”乘积的3d 数组
  • 外部np.einsum() 模拟(经过适当的整形后)这个3d 矩阵和C 的kronecker 乘积和求和。

我发现以下两个帖子非常有帮助:

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多