Python:将 (4,1,2) 数组与 (4,1) 相乘得到 (4,1,2) 数组
Python: Multiplying a (4,1,2)-array with a (4,1) to get a (4,1,2) array
正如标题所说,我基本上希望第二个矩阵(我们称之为 B)是第一个矩阵(我们称之为 A)的行的乘法列表。
我该怎么做?
示例:
A = np.array([[[ 1., 3.]],
[[ 1., 4.]],
[[ 1., 5.]],
[[ 1., 8.]]])
B = np.array([[0],
[1],
[3],
[8]], dtype=np.int64)
我希望结果是
C = np.array([[[0., 0.,]],
[[1., 4.]],
[[3., 15.]],
[[8., 64.]]])
要在这种情况下进行广播,您需要 B
一个新轴:
>>> A * B[:,None,:]
array([[[ 0., 0.]],
[[ 1., 4.]],
[[ 3., 15.]],
[[ 8., 64.]]])
您可能会发现 np.einsum()
对 n 维数组很有用。在这种情况下,您可以
np.einsum('i...,i...->i...',A,B)
以获得您想要的答案。
np.einsum('ijk,il->ijk',A,B)
也有效,而且更明确。
有关 np.einsum()
的更多详细信息,请参见 here。
正如标题所说,我基本上希望第二个矩阵(我们称之为 B)是第一个矩阵(我们称之为 A)的行的乘法列表。
我该怎么做? 示例:
A = np.array([[[ 1., 3.]],
[[ 1., 4.]],
[[ 1., 5.]],
[[ 1., 8.]]])
B = np.array([[0],
[1],
[3],
[8]], dtype=np.int64)
我希望结果是
C = np.array([[[0., 0.,]],
[[1., 4.]],
[[3., 15.]],
[[8., 64.]]])
要在这种情况下进行广播,您需要 B
一个新轴:
>>> A * B[:,None,:]
array([[[ 0., 0.]],
[[ 1., 4.]],
[[ 3., 15.]],
[[ 8., 64.]]])
您可能会发现 np.einsum()
对 n 维数组很有用。在这种情况下,您可以
np.einsum('i...,i...->i...',A,B)
以获得您想要的答案。
np.einsum('ijk,il->ijk',A,B)
也有效,而且更明确。
有关 np.einsum()
的更多详细信息,请参见 here。