【问题标题】:numpy multidimensional (3d) matrix multiplicationnumpy 多维(3d)矩阵乘法
【发布时间】:2017-02-10 20:20:15
【问题描述】:

我得到两个 3d 矩阵 A (32x3x3) 和 B(32x3x3),我想得到尺寸为 32x3x3 的矩阵 C。计算可以使用如下循环来完成:

a = numpy.random.rand(32, 3, 3)
b = numpy.random.rand(32, 3, 3)
c = numpy.random.rand(32, 3, 3)

for i in range(32):
    c[i] = numpy.dot(a[i], b[i])

我相信必须有一个更有效的单线解决方案来解决这个问题。谁能帮忙,谢谢。

【问题讨论】:

  • 你是指元素乘法,还是矩阵乘法 layers
  • 为什么投反对票?这个问题是明智而明确的,IMO。
  • @AlvaroP,因为 OP 使用的是dot,看起来像层乘是意图。我相信一些智能的 reshape/multiply/reshape-back 可以达到预期的效果,但不太确定。
  • @heltonbiker 你可能是对的。也许tensordot?docs.scipy.org/doc/numpy/reference/generated/…
  • @AlvaroP 亲测后tensordot好像不行...

标签: python numpy matrix multidimensional-array matrix-multiplication


【解决方案1】:

您可以使用np.einsum

In [142]: old = orig(a,b)

In [143]: new = np.einsum('ijk,ikl->ijl', a, b)

In [144]: np.allclose(old, new)
Out[144]: True

使用einsum 的一个优点是您几乎可以从索引中读出它在做什么:不理会第一个轴 (i),然后对最后两个轴执行矩阵乘法 (jk,kl->jl))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 2016-05-11
    • 1970-01-01
    • 2017-03-20
    • 2018-01-15
    • 1970-01-01
    • 2020-07-20
    • 2014-06-27
    相关资源
    最近更新 更多