Обратный np.reshape для 3-х измерений в цикле - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь создать аномалии за период 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)».

Было бы потрясающе, если бы вы могли помочь!

1 Ответ

0 голосов
/ 11 ноября 2019

Переписав мой ответ, после того, как вы предоставили дополнительную информацию:

У вас есть:

    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)

Вторая строка здесь, т.е. TheData[:,lt,ln], дает ошибку, потому что TheData - это двумерный массив, но вы пытаетесь нарезать его, используя TheData[:,lt,ln]

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