我想要的非常简单,但我不知道如何在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]]])