我有一个MxN的Numpy数组。我想采用数组的每一行,并将其逐元素乘以数组的每一行,从而得到乘积为MxMxN的numpy数组。
le_input = np.array([
[0, 0, 1],
[0, 1, 0]
])
le_expected_output = np.array([
[
[0, 0, 1],
[0, 0, 0]
],
[
[0, 0, 0],
[0, 1, 0]
]
])
我当然可以使用for循环来做到这一点,我已经尝试过了,但是我假设在Numpy中有一种更快的方法可以做到这一点。有人有什么想法吗?
答案 0 :(得分:5)
您可以使用np.einsum
:
np.einsum('ik,jk->ijk', le_input, le_input)
# array([[[0, 0, 1],
# [0, 0, 0]],
# [[0, 0, 0],
# [0, 1, 0]]])
或创建一个新轴并使用数组的广播属性在第一维上计算外部乘积:
le_input[:,None] * le_input
# array([[[0, 0, 1],
# [0, 0, 0]],
# [[0, 0, 0],
# [0, 1, 0]]])