我有两个xy坐标点阵列:
basic_pts = np.array([[0, 0], [1, 0], [2, 0], [0, 1], [1, 1], [0, 2]])
new_pts = np.array([[2, 2], [2, 1], [0.5, 0.5], [1.5, 0.5]])
因此,我只想从数组new_pts
中得到那些满足条件的点,即basic_pts
中没有具有更大x和y值的点。所以结果是
我有一个可行的解决方案,但由于列表理解的工作,它不适合更大的数据量。在
x_cond = ([basic_pts[:, 0] > x for x in new_pts[:, 1]])
y_cond = ([basic_pts[:, 1] > y for y in new_pts[:, 1]])
xy_cond_ = np.logical_and(x_cond, y_cond)
xy_cond = np.swapaxes(xy_cond_, 0, 1)
mask = np.invert(np.logical_or.reduce(xy_cond))
res_pts = new_pts[mask]
有没有更好的方法来解决这个问题,只使用numpy而不理解列表?在
您可以使用^{} -
正如val所指出的,创建中间
len(basic_pts)
×len(new_pts)
数组的解决方案可能过于占用内存。另一方面,在一个循环中测试new_pts
中的每个点的解决方案可能过于耗时。我们可以通过选择一个批量大小k并使用Divakar的解决方案对new_pts
进行批量测试来弥补这一差距:相关问题 更多 >
编程相关推荐