过滤二维 numpy 数组

Filter a 2D numpy array

我想要一个 numpy 2D ndarray 的子数组(在最小值和最大值之间)

    xy_dat = get_xydata()
    x_displayed = xy_dat[((xy_dat > min) & (xy_dat < max))]

最小值和最大值是浮点数,以便与数组的第一个值进行比较xy_dat

xy_dat 是一个二维 numpy 数组:

[[ 735964.            1020.        ]
 [ 735964.04166667    1020.        ]
 [ 735964.08333333    1020.        ]
 ..., 
 [ 736613.39722222    1095.        ]
 [ 736613.40416667    1100.        ]
 [ 736613.41111111    1105.        ]]

x_displayed 已正确过滤,但我丢失了第二个值(它现在是一维数组):

[ 735964.04166667  735964.08333333  735964.125      
 ...,  
736613.39027778  736613.39722222  736613.40416667]

如何过滤第一个值并保留另一个值?

您应该只在 第一个 列上执行条件:

x_displayed = xy_dat[((xy_dat<b>[:,0]</b> > min) & (xy_dat<b>[:,0]</b> < max))]

我们在这里做的是构建一个视图,我们只考虑带有 xy_dat[:,0] 的第一列。现在检查这个 1d 是否在边界之间,我们构造一个 1D 我们应该保留的行的布尔数组,现在我们通过将这些行用作 xy_dat[..] 参数.