3D numpy массив проблем и извлечения данных - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть некоторые данные о пожарах австралийского бу 2020 sh, с которыми я пытаюсь работать.

У меня есть некоторые данные в массивах numpy: широта (для широты), долгота (для долготы) ) и время.

Размер массива lat составляет: 350 с формой: (350,)

Размер массива lon это: 500 с формой: (500,)

Размер массива время составляет: 31 с формой: (31,) - это имеет смысл, так как это дни месяца в Янв 2020.

У меня есть другой массив, total_combustion_rate :

Размер массива total_combustion_rate составляет: 5425000 с формой: (31, 350 , 500) - поэтому он состоит из дней в месяце, значений lat и lon .

У меня есть окончательный массив с именем area_array :

Размер массива area_array : 175000 с формой: (350, 500). Он содержит площадь каждого квадрата сетки в км2.

Меня попросили выяснить, какой процент пожаров в Австралии произошел в январе 2020 года.

Я не уверен, как go узнать о хотя эта проблема.

В total_combustion_rate много значений, которые равны нулю. Избавление от них должно просто оставить меня с записями, которые означают, что в каждом квадрате сетки горит огонь описания. Я вижу, что мне нужно затем сложить те же значения lon и lat в area_array, которые имеют значение, отличное от нуля в total_combustion_rate, и это должно дать мне общую площадь квадратов сетки, которые были в огне.

Преобразование в процент должно тогда быть просто: (всего в огне / общей площади, содержащейся в area_array) * 100.

Я полностью потерялся в том, как бы я go сделал это, хотя, как только получу немного путают с массивами 3D numpy. Кто-нибудь может помочь?

1 Ответ

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

Я предполагаю, что numpy импортируется под именем np, и все массивы являются numpy массивами.

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

total_combustion_rate.sum(axis=0)

Теперь этот массив является точным место, где вы можете найти 0 значений. Идея состоит в том, чтобы определить, где находятся ненулевые записи, чтобы вы могли использовать их индекс для поиска area_array и получения нужных областей. Маскированный массив делает задачу чрезвычайно простой, поскольку он «скрывает» те записи, которые вам не нужны, то есть те, которые суммируют до 0.

np.ma.MaskedArray(area_array, total_combustion_rate.sum(axis=0) == 0)

Когда вы маскируете массив, все, что вам нужно сделать, это сравнить сумму немаскированных областей с суммой всех областей. Опять же, это достигается без особых усилий.

(np.ma.MaskedArray(area_array, total_combustion_rate.sum(axis=0) == 0).sum() / area_array.sum())

Все в одну (длинную) строку. :)

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