Вопрос по фильтрации / построению массива numpy - PullRequest
0 голосов
/ 19 апреля 2020

Мне нужна помощь.

У меня есть некоторые необработанные данные, относящиеся к лесным пожарам в Австралии.

Данные представлены для широкого диапазона параметров, каждый из которых соответствует маленький кусочек (или квадрат сетки) земной поверхности. В необработанных данных земля делится на 6,48 миллиона квадратов сетки, определяемых их широтой и долготой. Поскольку земля круглая, фактическая площадь квадрата сетки изменяется с широтой, и поэтому файл области также содержит соответствующие данные области. Чтобы сохранить небольшие размеры файлов, мы предварительно отфильтровали данные, чтобы они просто содержали результаты из региона, в котором находится Австралия. Данные импортируются в виде серии трехмерных массивов, представляющих дату, широту и долготу. Данные включают в себя следующее:

широта - значения широты в градусах

lon - значения долготы в градусах

время - время как объект даты и времени

total_combustion_rate - общая скорость сгорания в кг м-2 с-1

Я импортировал этот формат npz в numpy массивы, например, так:

# import numpy
import numpy as np
data=np.load('australia.npz') # in the same folder as this project
lat = data['arr_0'] # latitude values
lon = data['arr_1'] # longitude values
time = data['arr_2'] # times
total_combustion_rate = data['arr_3'] # in kg m-2 s-1

Размер массива total_combustion_rate: 5425000 с формой: (31, 350, 500) и типа: float32 Размер массива lat: 350 с формой: (350,) и типа: float32 Размер массива: lon: 500 с формой: (500,) и типа: float32 Размер массива времени: 31 с формой: (31,) и типа: datetime64 [нс]

Мне нужно построить график с ежедневной общей скоростью сгорания по оси Y для:

Долгота> 141 градус; широта от -29 до -40 градусов

со временем по оси X.

Очевидно, мне нужно отфильтровать массив 3D numpy total_combustion_rate, в котором есть время, широта и долгота но я полностью потерян.

Могу ли я получить помощь / указатели?

1 Ответ

0 голосов
/ 19 апреля 2020

Вы должны быть в состоянии выполнить фильтрацию с помощью numpy индексации :

res = total_combustion_rate[:, (lat > -40) & (lat < -29), lon > 141]

Обратите внимание на один амперсанд и парены.

Для того, чтобы построить график сгорания со временем вам нужно будет выбрать способ объединения данных по широте / долготе, например, в среднем:

plt.scatter(time, np.average(res, axis=(1,2))

ПРИМЕЧАНИЕ: Я не уверен, что это будет работать так как у меня нет доступа к данным, а вы их не опубликовали. Лучше опубликовать «минимальный рабочий пример» с данными игрушка / пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...