我有一个长度为m的n个向量的数组。例如,当 n = 3时 , m = 2 :
x = array([[1, 2], [3, 4], [5,6]])
我想将每个向量的外积与自身相乘,然后将它们连接成形状为 (n,m,m) 的正方形矩阵的数组。所以对于x以上我会得到
x
array([[[ 1, 2], [ 2, 4]], [[ 9, 12], [12, 16]], [[25, 30], [30, 36]]])
我可以for像这样循环
for
np.concatenate([np.outer(v, v) for v in x]).reshape(3, 2, 2)
是否有一个numpy表达式可以在没有Pythonfor循环的情况下执行此操作?
额外的问题:由于外部乘积是对称的,因此我不需要 mxm 乘法运算来计算它们。我可以从numpy获得这种对称性优化吗?
也许使用einsum?
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]]])