将Numpy数组中的所有行对相乘

时间:2019-02-22 16:24:37

标签: python arrays numpy matrix

我有一个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中有一种更快的方法可以做到这一点。有人有什么想法吗?

1 个答案:

答案 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]]])