For a numpy based solution, you can use numpy.where
and then get the row indexes from it and then use it for indexing you matrix. Example –
matrix[np.where((1 <= matrix[:,0]) & (matrix[:,0] <= 6) & (2 <= matrix[:,1]) & (matrix[:,1] <= 7))]
Demo –
In [169]: matrix Out[169]: array([[ 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10.], [ 11., 12., 13., 14., 15.], [ 16., 17., 18., 19., 20.]]) In [170]: matrix[np.where((1 <= matrix[:,0]) & (matrix[:,0] <= 6) .....: & (2 <= matrix[:,1]) & (matrix[:,1] <= 7))] Out[170]: array([[ 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10.]])
Another method , as indicated in the comments would be to use boolean masks, Example –
mask = ((1 <= matrix[:,0]) & (matrix[:,0] <= 6) & (2 <= matrix[:,1]) & (matrix[:,1] <= 7)) matrix[mask,:]
Demo –
In [41]: matrix Out[41]: array([[ 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10.], [ 11., 12., 13., 14., 15.], [ 16., 17., 18., 19., 20.]]) In [42]: mask = ((1 <= matrix[:,0]) & (matrix[:,0] <= 6) ....: & (2 <= matrix[:,1]) & (matrix[:,1] <= 7)) In [43]: In [43]: matrix[mask,:] Out[43]: array([[ 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10.]])