Как объединить несколько масок numpy

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

Я хочу сделать что-то вроде этого:

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

Обратите внимание, что в этом примере возникает ошибка

Ответ 1

Вы используете списки python вместо массивов numpy. Попробуйте это вместо этого:

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])

В вашем примере, когда m1 был списком, m1 == 1 оценивается как False (то же самое для m2), поэтому маска была False и data[False] = data[0] = 10.