Skip to content
Advertisement

Filtering out rows in multidimensional numpy arrays

Let’s say that I have an array like this:

array([[ 1,  2],
       [-1, -2],
       [ 0,  0],
       [-1,  2],
       [ 2, -1]])

I want to filter out all rows that include negative numbers in them.

And, hopefully, get this:

array([[ 1,  2],
       [ 0,  0]])

I tried this so far:

>>> print(a[a>=0].reshape(3,2))
array([[1, 2],
       [0, 0],
       [2, 2]])

But as you can see I get 1-dimensional array and I am getting unwanted rows (in this case is [2, 2])

How can I do this without using any for loop? Thanks in advance.

Advertisement

Answer

You can use np.all to check that all of the values in a row meet the condition.

import numpy as np 

a = np.array([[ 1,  2],
              [-1, -2],
              [ 0,  0],
              [-1,  2],
              [ 2, -1]])

a[np.all(a >= 0, axis=1)]
# returns:
array([[1, 2],
       [0, 0]])
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement