用numpy上的数组元素乘矩阵



我想要的非常简单,但我不知道如何在numpy上做到这一点。

我有以下矩阵:

M = [[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]

这个阵列:

A = [1, 2, 3]

我想用一种方法将矩阵与阵列上的每个元素相乘,以产生:

[[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
[[2, 2, 2],
[2, 2, 2],
[2, 2, 2]],
[[3, 3, 3],
[3, 3, 3],
[3, 3, 3]]]

没有任何for循环,我只想要一个numpy函数。

In [146]: M = np.ones((3,3),int)                                                                     
In [147]: M                                                                                          
Out[147]: 
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
In [148]: A = np.array([1,2,3])   

广播乘法是这样做的:

In [149]: A[:,None,None]*M                                                                           
Out[149]: 
array([[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
[[2, 2, 2],
[2, 2, 2],
[2, 2, 2]],
[[3, 3, 3],
[3, 3, 3],
[3, 3, 3]]])

A变为(3,1,1(;M自动广播到(1,3,3(和(3,3,3(

使用einsum

np.einsum('ij,k->kji', M, A)

array([[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
[[2, 2, 2],
[2, 2, 2],
[2, 2, 2]],
[[3, 3, 3],
[3, 3, 3],
[3, 3, 3]]])

最新更新