【问题标题】:Numpy 3darray matrix multiplication functionNumpy 3darray矩阵乘法函数
【发布时间】:2016-10-10 20:10:53
【问题描述】:

假设我有一个形状为 (m,n,n) 的 ndarray,W 和一个维度为 (m,n) 的向量 C。我需要通过以下方式将这两个相乘

result = np.empty(m,n)
for i in range(m):
    result[i] = W[i] @ C[i]

如何以矢量化方式执行此操作而无需循环和所有操作?

【问题讨论】:

    标签: python numpy matrix vectorization multiplication


    【解决方案1】:

    因为,您需要保持WC 的第一个轴对齐,同时通过矩阵乘法从它们中丢失最后一个轴,我建议使用np.einsum 进行非常有效的方法,例如所以-

    np.einsum('ijk,ik->ij',W,C)

    np.tensordotnp.dot 没有保持轴对齐的功能,这就是 np.einsum 改进的地方。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        使用 np.tensordot 完成

        ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)]
        assert np.all(result==ans)
        

        【讨论】:

          猜你喜欢
          • 2020-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-07
          相关资源
          最近更新 更多