siamii
siamii

Reputation: 24114

How to combine multiple numpy masks

m1 = [0,1,1,3]
m2 = [0,0,1,1]
data = [10,20,30,40]

I want to do something like this:

mask = (m1 == 1) & (m2 == 1)
data[mask] #should return 30

Note, this example results in an error

Upvotes: 18

Views: 38945

Answers (1)

tiago
tiago

Reputation: 23492

You are using python lists instead of numpy arrays. Try this instead:

import numpy as np

m1 = np.array([0,1,1,3])
m2 = np.array([0,0,1,1])

mask = (m1 == 1) & (m2 == 1)
data[mask]
# returns array([30])

In your example, when m1 was a list, m1 == 1 is evaluated as False (the same for m2), so mask was False and data[False] = data[0] = 10.

Upvotes: 30

Related Questions