Я пытаюсь создать аномалии за период 2004-2009 гг. (ClimSt-ClimEd) для набора данных с привязкой к сетке (количество месяцев: 192 (равно 16 годам), количество широт: 36, количество долгот:72). Чтобы вычесть среднее значение из каждого месяца, соответственно, я изменяю TheData на (192/12, 12), 16 лет за 12 месяцев. После этого мне нужно вернуть данные к их первоначальной форме (192, 36, 72).
Я борюсь с 3-мерным изменением формы. Я думаю, что-то не так в первом или последнем np.reshape, хотя я не уверен.
import matplotlib.pyplot as plt
import numpy as np
TheData = np.random.randint(0, 100, size=(192, 36, 72))
TheMDI = -1e30
NLats = 36
NLons = 72
ClimSt = 2004
ClimEd = 2009
NewSt = 2002
print('first', TheData.shape) #prints: first (192, 36, 72)
for lt in range(NLats): # range nlats goes through 0...36
for ln in range(NLons): # range nlons goes through 0...72
print('second', TheData.shape) #prints: second (192, 36, 72)
TheData = np.reshape(TheData[:,lt,ln],(len(TheData)//12,12))
for mm in range(12):
print('third', TheData.shape) #prints 12x: third (16, 12)
subarr=TheData[:,mm]
subclim=subarr[ClimSt-NewSt:(ClimEd+1)-NewSt] # creates data from 2004-2009
climgots=np.where(subclim > TheMDI)[0] # we want to add only existing data to 2004-2009
gots=np.where(subarr > TheMDI)[0] # we want to add only existing data to 2002-2017
if (len(climgots) > 15):
subarr[gots]=subarr[gots]-np.mean(subclim[climgots])
TheData[:,mm]=subarr
print('fourth', TheData.shape) #prints: fourth (16, 12)
TheData[:,lt,ln] = np.reshape(TheData,np.size(TheData)) #gives: IndexError: too many indices for array
print('fifth', TheData.shape) #should print: fifth (192, 36, 72)
Вывод на печать следующий:
first (192, 36, 72)
second (192, 36, 72)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
third (16, 12)
fourth (16, 12)
Traceback (most recent call last):
File "testooo.py", line 27, in <module>
TheData[:,lt,ln] = np.reshape(TheData,np.size(TheData))
IndexError: too many indices for array
Я ожидаюдополнительный «пятый (192, 36, 72)».
Было бы потрясающе, если бы вы могли помочь!