将两个 2D numpy 数组相乘为 3D 数组

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

我有两个 2D

numpy
数组,分别称为
A
B
,其中
A
M x N
B
M x n
。我的问题是,我希望将 B 的每行
的每个元素与 
A 的相应 row
 相乘,并创建一个大小为 
C
 的 3D 矩阵 
M x n x N
,而不使用 
for
-循环。 

举个例子,如果

A

 是:

A = np.array([[1, 2, 3], [4, 5, 6]])

B

B = np.array([[1, 2], [3, 4]])

然后乘法结果

C = A x B

看起来像这样

C = [ [[1, 2], [12, 16]], [[2, 4], [15, 20]], [[3, 6], [18, 24]] ]

我想要实现的目标是否清楚,是否可以在没有任何

for

 循环的情况下完成?最好的,廷吉斯

python arrays numpy multidimensional-array
2个回答
6
投票
您可以使用 NumPy Einstein 求和函数,

einsum():

C=np.einsum('ij,ik->jik',A,B)
    

4
投票
可以通过在每个数组中创建一个新轴并转置修改后的

A

A[np.newaxis,...].T * B[np.newaxis,...]

给予:

array([[[ 1, 2], [12, 16]], [[ 2, 4], [15, 20]], [[ 3, 6], [18, 24]]])
    
© www.soinside.com 2019 - 2024. All rights reserved.