代码之家  ›  专栏  ›  技术社区  ›  Nico Schlömer David Maze

(m,2),(n,2)数组的有效加法

  •  2
  • Nico Schlömer David Maze  · 技术社区  · 6 年前

    我有两个麻木的阵列 x 形状 (m, 2) y 形状 (n, 2) . 我想计算 (m, n, 2) 在位置处排列 (i, j) 一个人发现 x[i] y[j] out[i, j] . 列表理解工作

    import numpy
    
    x = numpy.random.rand(13, 2)
    y = numpy.random.rand(5, 2)
    
    xy = numpy.array([
        [xx + yy for yy in y]
        for xx in x
    ])
    

    但我想知道是否有一个更有效的解决方案通过 numpy.add.outer 或者沿着这些线。

    2 回复  |  直到 6 年前
        1
  •  2
  •   kuppern87    6 年前
    xy = x[:, None]+y
    

    应该有技巧。

        2
  •  3
  •   Graipher    6 年前

    可以使用numpys广播规则将第一个数组强制转换为形状 (13, 1, 2) 第二个是形状 (1, 5, 2) :

    numpy.all(x[:, None, :] + y[None, :, :] == xy)
    # True
    

    数组在维度中重复,其中 None 添加(因为它的长度为1)。

    因此,输出的形状变为 (13, 5, 2) .