过滤2D numpy数组

时间:2017-12-19 11:20:27

标签: python arrays numpy filter sub-array

我想要一个numpy 2D ndarray的子​​数组(在min和max之间)

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

min和max是float,以便与数组xy_dat

的第一个值进行比较

xy_dat是一个2D numpy数组:

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

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

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

如何在第一个值上设置过滤器并保留另一个值?

1 个答案:

答案 0 :(得分:4)

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

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

我们在这里做的是构建一个视图,我们只考虑xy_dat[:,0]的第一列。现在检查这个1d是否在边界之间,我们构造了一个我们应该保留的行的 1D 布尔数组,现在我们通过将它作为{{1}中的项目来选择这些行参数。