我想将(矩阵乘法)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个向量元素中的每一个。
答案 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
是三维中的索引,i
和j
是2x2矩阵和二维之间总和的索引阵列。
result
是:
array([[1, 4, 9],
[4, 5, 6]])