Я читал документацию в маске массива несколько раз, искал везде и чувствовал себя полностью глупо. Я не могу понять всю жизнь во мне, как применять маску от одного массива к другому.
Пример:
import numpy as np
y = np.array([2,1,5,2]) # y axis
x = np.array([1,2,3,4]) # x axis
m = np.ma.masked_where(y>2, y) # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
Итак, это прекрасно работает... но для построения этой оси y мне нужна соответствующая ось x. Как применить маску из массива y к массиву x? Что-то вроде этого имеет смысл, но производит мусор:
new_x = x[m.mask].copy()
new_x
array([5])
Итак, как это делается (обратите внимание, что новый массив x должен быть новым массивом).
Edit:
Ну, похоже, один способ сделать это работает следующим образом:
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
Но это невероятно грязно! Я пытаюсь найти решение столь же изящным, как IDL...