【问题标题】:Multiple matrix multiplication多重矩阵乘法
【发布时间】:2017-05-25 13:40:44
【问题描述】:

在 numpy 中,我有一个 N 3x3 矩阵的数组。这将是我如何存储它们的一个示例(我正在抽象出内容):

N = 10
matrices = np.ones((N, 3, 3))

我还有一个 3 向量数组,这就是一个例子:

vectors = np.ones((N, 3))

我似乎无法弄清楚如何通过 numpy 将它们相乘,从而实现这样的效果:

result_vectors = []
for matrix, vector in zip(matrices, vectors):
    result_vectors.append(matrix @ vector)

result_vector 的形状(在转换为数组时)为(N, 3)。 但是,由于速度,列表实现是不可能的。

我用各种转置尝试了 np.dot,但最终结果没有得到正确的形状。

【问题讨论】:

    标签: python performance numpy matrix matrix-multiplication


    【解决方案1】:

    使用np.einsum -

    np.einsum('ijk,ik->ij',matrices,vectors)
    

    步骤:

    1) 保持第一个轴对齐。

    2) 将输入数组中的最后一个轴相互求和。

    3) 让剩余的轴(matrices 的第二个轴)按元素相乘。

    【讨论】:

    • 看起来matmul 可以用一点维度按摩:(matrices @ vectors[:,:,None]).squeeze()
    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2018-04-11
    • 2020-04-02
    • 2012-02-07
    • 1970-01-01
    • 2017-03-11
    • 2013-12-23
    相关资源
    最近更新 更多