Оптимальный способ маскирования двумерного массива с использованием условия на одномерном массиве - PullRequest
4 голосов
/ 04 апреля 2019

У меня есть массив данных качества воздуха MxN (M = широта, N = долгота). Я хочу применить маску к этим данным, чтобы замаскировать что-либо выше экватора (широта> 0). Тем не менее, мои данные широты являются одномерными (M).

Я могу придумать способы маскировки этих данных, но все они кажутся слишком избыточными и длинными. Вот почему я хотел спросить вас, что, по вашему мнению, является лучшим способом сделать это.

import numpy as np
from numpy.ma import masked_where

my_data = np.random.randn(10,5)
latitude = np.linspace(-5,4,10)
longitude = np.linspace(10,14,5)

# I would like something like this, if latitude had the same shape as my_data
masked_data = masked_where(latitude < 0, my_data)

Пока что я использую np.tile, чтобы расширить широту до той же формы, что и my_data. Тем не менее, я задавался вопросом, есть ли более разумный способ индексации или обхода этого. В заключение: какой, по вашему мнению, лучший способ маскировать my_data?

Спасибо

1 Ответ

3 голосов
/ 04 апреля 2019

Вы можете просто индексировать my_data напрямую (numpy автоматически выполнит трансляцию маски):

my_data[latitude > 0]

Вывод:

(the last 4 rows of my_data)
...