Массив, соответствующий форме заданной переменной

Мне нужно сделать некоторые расчеты с файлом NetCDF. Итак, у меня есть две переменные со следующими размерами и размерами:

A [time | 1] x [lev | 12] x [lat | 84] x [lon | 228]
B [lev | 12]

Что мне нужно, так это создать новый массив C в форме (1,12,84,228), где содержимое B распространяется на все измерения A.

Обычно это легко делается в NCL с помощью функции соответствия. Я не уверен, что эквивалентно этому в Python.

Спасибо.


person kiyaserin    schedule 18.04.2020    source источник
comment
Вам понадобятся параметры вещания Numpy: docs.scipy.org/doc/numpy /user/basics.broadcasting.html . Это: stackoverflow.com/a/41267079/3581217 - довольно хороший ответ SO, который показывает различные варианты.   -  person Bart    schedule 19.04.2020


Ответы (1)


Функция numpy.broadcast_to может сделать что-то подобное, хотя в этом случае требуется, чтобы B было добавлено несколько дополнительных конечных измерений размера 1, чтобы удовлетворить пустые правила трансляции

>>> import numpy
>>> B = numpy.arange(12).reshape(12, 1, 1)
>>> B
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> B = B.reshape(12, 1, 1)
>>> B.shape
(12, 1, 1)
>>> C = numpy.broadcast_to(b, (1, 12, 84, 228))
>>> C.shape
(1, 12, 84, 228)
>>> C[0, :, 0, 0]
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> C[-1, :, -1, -1]
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

person dhassell    schedule 27.05.2020