【问题标题】:Python: Multiplying a list of vectors by a list of matrices as a single matrix operationPython:将向量列表乘以矩阵列表作为单个矩阵运算
【发布时间】:2018-02-23 03:04:08
【问题描述】:

我有一个包含 100 个 N-dimensional 向量的列表和一个 100 MxN 矩阵的列表。所以你可以把这两个数据结构想象成一个100xN列表(或numpy数组)和一个100xMxN列表(或numpy数组)。

我想要做的是获取每个向量及其对应矩阵的点积,这样输出应该是100 M-dimensional 矩阵(即100xM 列表或numpy 数组)。

但是,我不确定如何执行此操作。出于效率的明显原因,我不想迭代地做它。我也知道这不是基本的矩阵乘法。我想我可能想使用np.einsum,但我对它并不太熟悉。

有人愿意帮忙吗?

【问题讨论】:

    标签: python numpy matrix linear-algebra


    【解决方案1】:

    你可以像这样使用np.einsum -

    np.einsum('ij,ikj->ik',a,b)
    

    示例运行 -

    In [42]: M,N = 3,4
    
    In [43]: a = np.random.rand(100,N)
    
    In [44]: b = np.random.rand(100,M,N)
    
    In [45]: np.einsum('ij,ikj->ik',a,b).shape
    Out[45]: (100, 3)
    

    您也可以使用 np.matmul@ 运算符 (Python 3.x),尽管它似乎比 einsum 稍慢 -

    np.matmul(a[:,None],b.swapaxes(1,2))[:,0]
    

    【讨论】:

    • 工作就像一个魅力。我向任何不确定此解决方案为何有效的人推荐 [此页面] (ajcr.net/Basic-guide-to-einsum)。现在很清楚了。
    猜你喜欢
    • 2015-05-20
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多