У меня есть 5-мерный ndarray: spec ([800,721,9,476,476], dtype = np.float32).Пять измерений моего массива соответствуют (время, выброс, уровень высоты, широта, долгота), а его значения представляют общее количество частиц в данный момент времени, выброс, высоту, широту и долготу.
3-е измерение соответствует 9 уровням высоты: 100м, 200м, 300м, 500м, 1000м, 1500м, 2000м, 15000м и высоте смешивания.
В качестве исключения, девятый уровень высоты (высота смешения) содержит высоту вместоот общего количества частиц в данное время и место, принадлежащих к конкретному выбросу на высоте выше 15000 м.
Для данного выпуска, времени, широты и долготы я хочу добавить все частицы, расположенные на уровнях высоты ниже высоты перемешивания.
#For one release extract all values for all other dimensions:
release_0 = dataset['spec001'][:,release_num,:,:,:]
#Extract the mixing height for all grid cells (lat/long) in time:
mix_height = release_0[:,8,:,:]
#Extract all height-values (except for the last one that contains the
mixing-height) for all grids (lat/long) and all times of this release:
resp = release_0[:,:8,:,:]
#find index of height level under mixing-height:
altitudeMax_0 = np.argmin(height < mix_height[time,lat,long])
#argmin returns the index of the first list-item with the lowest value.
r = resp[fp_time, :altitudeMax_0+1, ilat, ilong].sum()
#sum particles from all height levels under the height-level
Я контролирую это с помощьюпетли для выпуска, время, широта и долгота, и это занимает вечность.Есть ли способ использовать векторизацию, чтобы пропустить циклы и ускорить процесс?
Заранее спасибо!