2013-03-31 3 views
3

Я хотел бы, чтобы отфильтровать значения в Numpy meshgrid:Фильтрация NumPy meshgrid

X,Y = np.mgrid[-10:10,-10:10] 

в этом случае, я хотел бы, чтобы удалить все координаты, для которых x**2 + y**2 <= 2. Однако, когда я пытаюсь фильтровать массив непосредственно, например

filter(lambda x,y: x**2 + y**2 >= 2, np.meshgrid[-10:10,-10:10]) 

Я получаю ошибки, потому что я не правильно дело со структурой массива.

Любые советы для этого права будут оценены!

+0

Если вы нашли решение, было бы хорошо ответить на вопрос самостоятельно, но теперь вы должны отметить лучший ответ (он может быть вашим) в качестве принятого ответа, нажав зеленую галочку. – askewchan

ответ

1
X,Y = np.mgrid[-10:10,-10:10] 
idx = (X**2 + Y**2 > 2) 
X, Y = X[idx], Y[idx] 

Проблема в том, что у вас больше нет двумерных массивов, что может быть проблемой для таких вещей, как matplotlib.


Видя свой собственный ответ, и что вы в принципе хотите заменить 0 записи не выполняет условие, это, вероятно, будет чище и эффективнее делать:

idx = X**2 + Y**2 > 2 
X[~idx] = 0 
Y[~idx] = 0 
+0

Это не удаляет координаты, для которых 'x ** 2 + y ** 2 <= 2', только' x ** 2 + y ** 2 <2' – askewchan

+0

@askewchan Он делает это сейчас. Спасибо за проверку ошибок! – Jaime

+0

К сожалению, мне нужны 2D-массивы, потому что я использую matplotlib. Однако, пытаясь сделать работу с вашим кодом, я понял альтернативное приемлемое решение. – wk2752

2

Я был в состоянии для достижения результата, что мне нужно, используя numpy.where, путем фильтрации каждого массива по отдельности, но ссылающийся как в where состоянии:

X,Y = np.mgrid[-10:10,-10:10] 
X,Y = np.where(X**2 + Y**2 > 2, X, 0), np.where(X**2 + Y**2 > 2, Y, 0) 

В результате появляются новые 2D-массивы, которые мне нужны для matplotlib. Спасибо всем, кто нашел время, чтобы посмотреть на этот вопрос!

Смежные вопросы