【问题标题】:3D Matrix multiplication in numpy and theanonumpy 和 theano 中的 3D 矩阵乘法
【发布时间】:2018-01-15 20:23:10
【问题描述】:

我有一个大小为(5,7,3) 的矩阵A 和一个大小为(5,3,8) 的矩阵B。我想把它们相乘C = A.B,C的大小是(5,7,8)

表示矩阵A中一个大小为(7,3)的二维子矩阵将分别与矩阵B中一个大小为(3,8)的二维子矩阵相乘。所以我要乘5倍。

最简单的方法是使用循环和numpy:

for u in range(5):
    C[u] = numpy.dot(A[u],B[u])

有什么方法可以在不使用循环的情况下做到这一点? Theano 中是否有任何等效方法可以在不使用扫描的情况下执行此操作?

【问题讨论】:

    标签: python numpy matrix theano.scan


    【解决方案1】:

    在 numpy 中使用 np.einsum 可以非常简单地完成。

    C = numpy.einsum('ijk,ikl->ijl', A, B)
    

    也可以是:

    C = numpy.matmul(A,B)
    

    自从docs状态:

    如果任一参数是 N-D,N > 2,则将其视为驻留在最后两个索引中的矩阵堆栈并相应地广播

    Theano 具有与 batched_dot 相似的功能,所以它会是

    C = theano.tensor.batched_dot(A, B)
    

    【讨论】:

    • 在Theano中,我发现theano.tensor.batched_dot(X, Y)可以做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2016-05-11
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多