作者:自由飘落de花瓣 | 来源:互联网 | 2022-12-05 14:40
我需要将数组A的每一行与元素B的所有行相乘.例如,假设我们有以下数组:
A = np.array([[1,5],[3,6]])
B = np.array([[4,2],[8,2]])
我想得到以下数组C:
C = np.array([[4,10],[8,10],[12,12],[24,12]])
我可以通过使用for循环来做到这一点但我认为可能有更好的方法来做到这一点.
编辑:我想重复和平铺,但我的阵列不是那么小.它可能会产生一些内存问题.
1> Divakar..:
杠杆broadcasting
扩大会变暗A
以3D
与None/np.newaxis
,执行的elementwise乘法和重塑回2D
-
(A[:,None]*B).reshape(-1,B.shape[1])
基本上是 -
(A[:,None,:]*B[None,:,:]).reshape(-1,B.shape[1])
示意性地说,它是:
A : M x 1 x N
B : 1 x K x N
out : M x K x N
最后重塑合并最后两个轴并给我们(M x K*N)
成形2D
阵列.
我们还可以einsum
用来3D
在一个函数调用中执行扩展和元素乘法 -
np.einsum('ij,kj->ikj',A,B).reshape(-1,B.shape[1])