有效地添加(m,2),(n,2)个数组

时间:2018-07-18 08:42:23

标签: python numpy

我有两个形状为x的numpy数组(m, 2)和形状为y的{​​{1}}。我想计算(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 ]) 或类似方法的更有效的解决方案。

2 个答案:

答案 0 :(得分:3)

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

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

在添加了None的维度上重复该数组(因为其长度为1)。

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

答案 1 :(得分:2)

xy = x[:, None]+y

应该可以解决问题。