过滤二维 numpy 数组

rey*_*num 6 python arrays numpy filter sub-array

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

    xy_dat = get_xydata()
    x_displayed = xy_dat[((xy_dat > min) & (xy_dat < max))]
Run Code Online (Sandbox Code Playgroud)

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

xy_dat 是一个二维 numpy 数组:

[[ 735964.            1020.        ]
 [ 735964.04166667    1020.        ]
 [ 735964.08333333    1020.        ]
 ..., 
 [ 736613.39722222    1095.        ]
 [ 736613.40416667    1100.        ]
 [ 736613.41111111    1105.        ]]
Run Code Online (Sandbox Code Playgroud)

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

[ 735964.04166667  735964.08333333  735964.125      
 ...,  
736613.39027778  736613.39722222  736613.40416667]
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*sem 8

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

x_displayed = xy_dat[((xy_dat[:,0] > min) & (xy_dat[:,0] < max))]
Run Code Online (Sandbox Code Playgroud)

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