Я не думаю, что вам нужен цикл вообще, так как вы можете указать, по какой оси вы хотите вычислить среднее значение. Так что-то вроде этого должно быть достаточно (это заменяет весь блок кода, который вы опубликовали):
name1 = np.mean(name1_aSrc[9:40,:,:], axis=(1,2))
name2 = np.mean(name2_aSrc[9:40,:,:], axis=(1,2))
# etc..
Небольшой пример с некоторыми данными NetCDF, которые у меня были:
import xarray as xr
import numpy as np
f = xr.open_dataset('u.xz.nc', decode_times=False)
u = f['u'].values
print(u.shape) # prints: (5, 96, 128, 1)
umean = np.mean(u, axis=(1,2,3))
print(umean.shape) # prints: (5,)
Альтернативное решение состоит в том, чтобы позволить xarray вычислить среднее значение для (именованного) измерения или нескольких измерений. Быстрый пример с некоторыми другими данными:
import xarray as xr
import numpy as np
f = xr.open_dataset('drycblles_default_0000000.nc', decode_times=False)
# Original file has 3 dimensions:
print(f.dims) # prints Frozen(SortedKeysDict({'time': 37, 'z': 32, 'zh': 33}))
# Calculate mean over one single dimension:
fm1 = f.mean(dim='z')
print(fm1.dims) # prints Frozen(SortedKeysDict(OrderedDict([('time', 37), ('zh', 33)])))
# Calculate mean over multiple dimensions:
fm2 = f.mean(dim=['z','zh'])
print(fm2.dims) # prints Frozen(SortedKeysDict(OrderedDict([('time', 37)])))
fm1
и fm2
снова просто наборы данных xarray:
<xarray.Dataset>
Dimensions: (time: 37)
Coordinates:
* time (time) float64 0.0 300.0 600.0 900.0 ... 1.02e+04 1.05e+04 1.08e+04
Data variables:
iter (time) float64 0.0 5.0 10.0 15.0 20.0 ... 282.0 293.0 305.0 317.0
area (time) float64 1.0 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0 1.0
areah (time) float64 1.0 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0 1.0
th (time) float64 304.8 304.8 304.8 304.8 ... 305.1 305.1 305.1 305.1
th_3 (time) float64 1.246e-08 -3.435e-11 ... 7.017e-06 5.548e-05