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

问题描述 投票:0回答:1

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

编辑:我想重复和平铺,但我的阵列不是那么小。它可能会产生一些内存问题。

python numpy matrix-multiplication
1个回答
5
投票

利用broadcastingA的dims扩展到3DNone/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])
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.