Я работаю с набором данных, который привязан к сетке, со временем, широтой и долготой в качестве индексов, и месячной температурой в качестве фактической переменной. Сначала я загружаю данные и извлекаю нужную переменную.
data=xr.open_dataset('E:/Riskpulse_HD/Jon climate study/adaptor.mars.internal-1583855532.1432714-8122-5-ace27afd-90c0-4a7d-b9ca-f3d5528c5ea1.nc')
temp = data['t2m'][:,0,:,:]-273
Я создаю массивы со значениями в указанных точках c. Существует одно значение для каждого месяца, начиная с 1990-01-01
, затем 1991-02-01
и так далее до настоящего момента. Теперь я создаю словарь нескольких городов по всему миру в различных точках широты и долготы.
Теперь я создаю словарь для городов и десятилетий.
cities = {
"Shanghai": {"coords": [31.25, 121.5]},
"Singapore": {"coords": [1.25, 103.75]},
"Shenzhen": {"coords": [22.5, 114]},
"Ningbo-Zhoushan": {"coords": [29.75, 121.5]},
"Guangzhou": {"coords": [23.0, 113.5]}...}
decades = {
"1990s": {"start": dt.datetime(1990,1,1), "end": dt.datetime(1999,12,31)},
"2000s": {"start": dt.datetime(2000,1,1), "end": dt.datetime(2009,12,31)},
"2010s": {"start": dt.datetime(2010,1,1), "end": dt.datetime(2019,12,31)}}
Теперь я л oop и создайте новые словарные записи в виде городов ['Название города'] ['Десятилетие'] следующим образом.
for city, location in cities.items():
data = temp.sel(latitude=location['coords'][0], longitude=location['coords'][1])
for decade, dates in decades.items():
cities[city][decade] = data.sel(time=(slice(dates['start'], dates['end'])))
Данные выглядят так для cities['Shanghai']['1990s']
и cities['Singapore']['1990s']
:
-->array([ 5.1273193, 6.3297424, 11.221802 , 14.664612 , 19.932983 ,...)]
-->array([26.064209, 26.56131 , 27.427673, 27.856506, 28.208313, 28.161072,...)]
Где первое значение соответствует среднемесячной температуре в Шанхае в 1990-01-01
, а второе - среднемесячная температура в Шанхае в 1990-02-01
.
Теперь, что бы я хотел хотел бы создать простой l oop, который берет 5 городов, которые я перечислил, и складывает средние временные значения для каждого месяца в течение каждого десятилетия.
Я пробовал что-то вроде этого
for i in cities.keys():
total=np.sum(cities[i]['1990s'])
-->total array(1272.0103, dtype=float32)
Но это просто добавляет каждую точку данных температуры вместе. Я хочу, чтобы операция добавляла каждый элемент массива, сохраняя все элементы одинаковыми в зависимости от месяца, в который они были добавлены. Например, для Шанхая и Сингапура это будет выглядеть так:
array([31.191528, 32.891052, 38.649475, 42.52112 , 48.141296,...)]