在Python中如何将数组的每一行与数组元素的所有行相乘

在Python中如何将数组的每一行与数组元素的所有行相乘,python,numpy,matrix-multiplication,Python,Numpy,Matrix Multiplication,我需要将数组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循环来实现这一点,但我认为可能有更好的方法 编辑:我曾想过重复和平铺,但我的数组没有那么小。这可能会造成一些内存问题。利用A到3D的扩展DIM,使用None/np。newa

我需要将数组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循环来实现这一点,但我认为可能有更好的方法

编辑:我曾想过重复和平铺,但我的数组没有那么小。这可能会造成一些内存问题。

利用
A
3D
的扩展DIM,使用
None/np。newaxis
,执行元素乘法并重新整形回
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])
使用
None/np将
A
的DIM扩展到
3D
。newaxis
,执行元素乘法并重新整形回
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])

虽然Divakar正确地推导出了您想要的内容,但您确实应该向我们展示循环代码。或者是
C
的(2,2,2)版本,而不是(4,2)。有多种方式可以将
A
行与
B
行组合在一起(例如
np.kron(A,B)
)。对不起。我投了赞成票,但忘了接受。谢谢你的提醒。虽然Divakar正确地推断了你想要的,但你真的应该给我们看循环代码。或者是
C
的(2,2,2)版本,而不是(4,2)。有多种方式可以将
A
行与
B
行组合在一起(例如
np.kron(A,B)
)。对不起。我投了赞成票,但忘了接受。谢谢你的提醒。