Python: перебор массивов разных размеров - PullRequest
0 голосов
/ 31 мая 2018

В своей работе я пытаюсь написать функцию, которая вычисляет давление на вертикальных уровнях сетки из двух входных данных:

1) xArray.DataArray, содержащее как минимум 2 измерения, соответствующих полю поверхностного давления(но обычно дополнительно одно время и одно измерение члена ансамбля, возможно, больше)
2) целое число, соответствующее количеству вертикальных уровней

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

Соответствующая часть такова:

pressure = np.empty(sfc_p.shape + (vert_res,), dtype=float)

# loop 
for lev in range(vert_res):
    pressure[..., lev] = float(a_n[lev]) + float(b_n[lev]) * sfc_p.values[sfc_p.shape[:]]

return pressure

sfc_p - входной массив, vert_res - целое число, a_n и b_n- некоторые коэффициенты.

Формы sfc_p и pressure:

(1, 51, 66, 131)  
(1, 51, 66, 131, 137)  

соответственно, например.

В любом случае, это приводит к ошибке:
"IndexError: индекс 1 выходит за границы оси 0 с размером 1"

Это, очевидно, относится к первому измерению, но я просто не могу понять, что происходит неправильно, или узнать, как правильно индексировать в такихслучай.Я не нашел подобных вопросов.Кто-нибудь может мне помочь?
Если что-то неясно, я буду рад предоставить дополнительную информацию.

1 Ответ

0 голосов
/ 06 июня 2018

Простая замена sfc_p.shape[:] на : в строке
pressure[..., lev] = float(a_n[lev]) + float(b_n[lev]) * sfc_p.values[sfc_p.shape[:]]
решила мою проблему.Спасибо всем за помощь в прояснении моей проблемы!

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