python - 使用 numpy.einsum 进行矩阵乘法

标签 python arrays numpy

我有以下两个具有形状的数组:

    A = (d,w,l)
    B = (d,q)

我想将它们组合成具有以下形状的 3d 数组:

    C = (q,w,l)

更具体一点,在我的例子中,d(3d 数组的深度)是 2,我首先想将 A 上层 w * l 中的所有位置相乘(所以 d = 0 ) 在最高行中具有 B 的第一个值(因此 d=0,q=0)。对于 d=1 我也这样做,然后将两者相加:

    C_{q=0,w,l} = A_{d=0,w,l}*B_{d=0,q=0} + A_{d=1,w,l}*B_{d=1,q=0}

我想通过使用 numpy.einsum 来计算 C。我想到了下面的代码:

    A = np.arange(100).reshape(2,10,5)

    B = np.arange(18).reshape(2,9)

    C = np.einsum('ijk,i -> mjk',A,B)

其中 ijk 指的是 2,10,5,mjk 指的是 9,10,5。但是我得到一个错误。有什么方法可以用 numpy einsum 执行这种乘法吗?

谢谢

最佳答案

你的形状 A = (d,w,l), B = (d,q), C = (q,w,l) 实际上写出 einsum表达

C=np.einsum('dwl,dq->qwl',A,B)

我可以用它来测试

In [457]: np.allclose(A[0,:,:]*B[0,0]+A[1,:,:]*B[1,0],C[0,:,:])
Out[457]: True

关于python - 使用 numpy.einsum 进行矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989059/

相关文章:

python - 为什么我收到 "ImportError: No module named pyramid.config"

python - 限制 re.findall 引用中的字数

javascript - 展平数组对象的数组 JavaScript

python - Scipy 旋转和缩放图像而不改变其尺寸

Python/Scipy : Find "bounded" min/max of a matrix

python - 将curl get to Rest api转换为python

python - 双向链表的长度实现,python

PHP - 替换多维数组中的数据,特定键

java - 如何在 Java 中添加 vector 作为值

Python有任何用于日期时间序列的简单直方图的绘图服务解决方案吗? Bokeh 或其他