2014-09-09 3 views
3

В моем приложении у меня есть матрица значений и ее координаты (lon, lat), полученные из команды meshgrid. Я хочу извлечь конкретную субрегион этой матрицы на основе ограничений долготы и широты. Я пробовал это решение, но оно не работает. Мне нужно в качестве вывода три матрицы для данных, а две другие для сетки.Подмножество экстракта Numpy данных сетки

Lons, Lats = meshgrid(X, Y) 
indexes = np.where((Lons < MLon) & (Lons > mLon) & (Lats < MLat) & (Lats > mLat)) 
newLons = Lons[indexes] 
newLats = Lats[indexes] 
newData = Data[indexes] 

Новые полученные значения - это одномерные массивы, а не матрицы. Как я могу это исправить?

ответ

2

Нет никакой гарантии от точки зрения np.where, что вы будете извлекать значения, которые составляют сплошную прямоугольную подматрицу, поэтому она возвращает их вровень. Вы можете переделать их, но для этого вам нужно выяснить, какова их форма. Лучшим и более общим решением было бы найти ограничительную коробку, а затем извлечь ее:

Xspan = np.where((X < MLon) & (X > mLon))[0][[0, -1]] 
Yspan = np.where((Y < MLat) & (Y > mLat))[0][[0, -1]] 

# Create a selection 
sel = [slice(Xspan[0], Xspan[1] + 1), slice(Yspan[0], Yspan[1] + 1)] 

# Extract 
newLons = Lons[sel] # == Lons[Xspan[0]:Xspan[1]+1, Yspan[0]:Yspan[1]+1] 
newLats = Lats[sel] 
newData = Data[sel] 
Смежные вопросы