python - 如何循环 NetCDF 时间序列
问题描述
我有一些 NetCDF 时间序列数据。通过读取变量,我想列出每个数据的全局平均值。我编写了有效的代码,但它并不性感。如何以更好的形式编写(循环)此代码?
variables = 'name1 name2 name3 name4'.split()
name1 =[]
name2 =[]
name3 =[]
name4 =[]
for i in range (9,40):
name1_irrY = name1_aSrc[i].mean()
name1.append(name1_irrY)
name2_irrY = name2_aSrc[i].mean()
name2.append(name2_irrY)
name3_irrY = name3_aSrc[i].mean()
name3.append(name3_irrY)
name4_irrY = name4_aSrc[i].mean()
sname4.append(name4_irrY)
"name"_aSrc[i,:,:]
是 NetCDF 的变量。
因为我有很多文件,所以我需要足够的方法。
解决方案
我认为您根本不需要循环,因为您可以指定要沿哪个轴计算平均值。所以这样的事情就足够了(这将替换您发布的整个代码块):
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
推荐阅读
- php - sortBy 返回对象而不是数组
- python - 如何指定与 python sounddevice 一起使用的录音设备
- tensorflow - 从检查点加载 BERT 时评估精度不同
- sql - 如何添加/减去具有空值的多个选择语句
- java - AWS 中的生产级微服务架构
- android - 是否可以仅为 Android 模块调用该类?
- git - git undo 合并到 master,但将更改保留在本地
- jquery - 如何在 jquery init 方法中调用特定函数
- react-native - 使用 FlatList 渲染项目时在哪里放置逻辑
- c# - 自定义 IEqualityComparer 使用 LINQ 计算两个列表之间的差异,除了