Select elements of numpy array via boolean mask array Select elements of numpy array via boolean mask array numpy numpy

Select elements of numpy array via boolean mask array


You probably want something like this:

>>> a = np.array([True, True, True, False, False])>>> b = np.array([[1,2,3,4,5], [1,2,3,4,5]])>>> b[:,a]array([[1, 2, 3],       [1, 2, 3]])

Note that for this kind of indexing to work, it needs to be an ndarray, like you were using, not a list, or it'll interpret the False and True as 0 and 1 and give you those columns:

>>> b[:,[True, True, True, False, False]]   array([[2, 2, 2, 1, 1],       [2, 2, 2, 1, 1]])


You can use numpy.ma module and use np.ma.masked_array function to do so.

>>> x = np.array([1, 2, 3, -1, 5])                                                >>> mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])masked_array(data=[1, 2, 3, --, 5], mask=[False, False,  False, True, False], fill_value=999999)


Hope I'm not too late! Here's your array:

X = np.array([[1, 2, 3, 4, 5],               [1, 2, 3, 4, 5]])

Let's create an array of zeros of the same shape as X:

mask = np.zeros_like(X)# array([[0, 0, 0, 0, 0],#        [0, 0, 0, 0, 0]])

Then, specify the columns that you want to mask out or hide with a 1. In this case, we want the last 2 columns to be masked out.

mask[:, -2:] = 1# array([[0, 0, 0, 1, 1],#        [0, 0, 0, 1, 1]])

Create a masked array:

X_masked = np.ma.masked_array(X, mask)# masked_array(data=[[1, 2, 3, --, --],#                    [1, 2, 3, --, --]],#              mask=[[False, False, False,  True,  True],#                    [False, False, False,  True,  True]],#              fill_value=999999)

We can then do whatever we want with X_masked, like taking the sum of each column (along axis=0):

np.sum(X_masked, axis=0)# masked_array(data=[2, 4, 6, --, --],#              mask=[False, False],#              fill_value=1e+20)

Great thing about this is that X_masked is just a view of X, not a copy.

X_masked.base is X# True