Filter a 2D numpy array

15,914

You should perform the condition only over the first column:

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

What we do here is constructing a view where we only take into account the first column with xy_dat[:,0]. By now checking if this 1d is between bounds, we construct a 1D boolean array of the rows we should retain, and now we make a selection of these rows by using it as item in the xy_dat[..] parameter.

Share:
15,914
reynum
Author by

reynum

Updated on July 04, 2022

Comments

  • reynum
    reynum almost 2 years

    I want to have a sub array (between min and max) of a numpy 2D ndarray

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

    min and max are float in order to be compare with the first value of the array xy_dat

    xy_dat is a 2D numpy array :

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

    x_displayed is correctly filtered but I have lost the second value (it is now a 1D array) :

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

    How make the filter on the first value and keep the other ?