在numpy中创建外部产品数组

发布于 2021-01-29 15:01:23

我有一个长度为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)

是否有一个numpy表达式可以在没有Pythonfor循环的情况下执行此操作?

额外的问题:由于外部乘积是对称的,因此我不需要 mxm 乘法运算来计算它们。我可以从numpy获得这种对称性优化吗?

关注者
0
被浏览
73
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    也许使用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]]])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看