我有一组长度为m的n个向量.例如,n = 3,m = 2:
x = array([[1, 2], [3, 4], [5,6]])
我想将每个矢量的外积与自身相连,然后将它们连接成一个形状为(n,m,m)的方阵矩阵.所以对于上面的x,我会得到
array([[[ 1, 2],
[ 2, 4]],
[[ 9, 12],
[12, 16]],
[[25, 30],
[30, 36]]])
我可以用for循环这样做
np.concatenate([np.outer(v, v) for v in x]).reshape(3, 2, 2)
有没有Python for循环的numpy表达式吗?
额外问题:由于外部产品是对称的,我不需要m×m乘法运算来计算它们.我可以从numpy中获得这种对称性优化吗?
解决方法:
也许用einsum?
>>> x = np.array([[1, 2], [3, 4], [5,6]])
>>> np.einsum('ij...,i...->ij...',x,x)
array([[[ 1, 2],
[ 2, 4]],
[[ 9, 12],
[12, 16]],
[[25, 30],
[30, 36]]])