python – 在numpy中创建外部产品数组

我有一组长度为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]]])
上一篇:python – 使用布尔张量的Tensorflow索引


下一篇:文件上传php $_FILES未定义索引错误