numpy dot或einsum用于将N 2x2数组与2xn数组相乘

时间:2016-05-24 10:10:06

标签: numpy

我想将(矩阵乘法)N 2x2数组乘以2xN数组。

n = np.array([1,2,3])
m = np.array([[n,0*n],[0*n,0*n+1]]).T
# shape: (3, 2, 2)
# [[[1 0]
#   [0 1]]

#  [[2 0]
#   [0 1]]

#  [[3 0]
#   [0 1]]]

x = np.array([[1,2,3],[4,5,6]])
# shape: (2, 3)
# [[1 2 3]
#  [4 5 6]]

所以结果应该是

[[1 4 9]
 [4 5 6]]

这应该可以用einsum或dot来实现,但我两者都失败了。根据我的阅读,带点的解决方案可能会更快。

编辑:提供更多上下文:这实际上只是2xn向量上的(2x2)矩阵乘法。但是有n个不同的矩阵:一个用于n个向量元素中的每一个。

1 个答案:

答案 0 :(得分:2)

您可以使用np.einsum,如下所示:

import numpy as np

n = np.array([1,2,3])
m = np.array([[n,0*n],[0*n,0*n+1]]).T

x = np.array([[1,2,3],[4,5,6]])

result = np.einsum('nij, jn->in', m, x)

einsum中,n是三维中的索引,ij是2x2矩阵和二维之间总和的索引阵列。

result是:

array([[1, 4, 9],
       [4, 5, 6]])