python - 循环遍历python中netcdf的所有时间步,将计算输出存储在数组中并将所有数组重新合并在一起
问题描述
我有一个包含风的 u 和 v 分量的 netcdf 文件。netcdf 文件包含 7305 个每日值。对于每一天我想做一些计算,将输出存储在一个数组中,然后合并所有数组,这样每个数组都会对应一个特定的日子。初始 netcdf 文件有 lats(101) 和 lons(129)。所以最终的数组 (vort) 将有 (7305,101,129) 个维度。下面我已经包含了我到目前为止开发的代码。如果我将每一天单独存储在 vort 中,它会起作用,但当我“追加”时不起作用。有什么帮助吗?
from matplotlib import pyplot
from matplotlib.cm import get_cmap
from __future__ import print_function
from netCDF4 import Dataset,num2date,date2num
from matplotlib.colors import from_levels_and_colors
from cartopy import crs
from cartopy.feature import NaturalEarthFeature, COLORS
from metpy.units import units
from datetime import datetime
from metpy.plots import StationPlot
#
import metpy.calc as mpcalc
import xarray as xr
import cartopy.crs as ccrs
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import datetime
import cartopy.feature as cfeature
import mygrads as mg
#
#
root_dir = '/users/pr007/mkaryp/'
nc = Dataset(root_dir+'ERA5_ensmean_daymean.nc')
#
lon=nc.variables['longitude'][:]
lat=nc.variables['latitude'][:]
#
dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)
#
u = []
v = []
vort = np.array([])
#
for i in range(7305):
v = np.array(nc.variables['v'][i,:,:])
u = np.array(nc.variables['u'][i,:,:])
#
v = units.Quantity(v, 'm/s')
u = units.Quantity(u, 'm/s')
#
# Compute dx and dy spacing for use in divergence calculation
vort1 = np.array(mpcalc.vorticity(u, v, dx=dx, dy=dy))
vort = np.append([vort, vort1])
#
print(i)
编辑 使用的数据文件的子样本可以在这里找到。这个 netcdf 文件有 10 个时间步,而不是 7305。
解决方案
如果我正确理解您的问题,您想要做的是:
lon=nc.variables['longitude'][:]
lat=nc.variables['latitude'][:]
#
dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)
#
u = []
v = []
vort = []
#
for i in range(10):
v.append(np.array(nc.variables['v'][i,:,:]))
u.append(np.array(nc.variables['u'][i,:,:]))
v[i] = units.Quantity(v[i], 'm/s')
u[i] = units.Quantity(u[i], 'm/s')
vort.append(np.array(mpcalc.vorticity(u[i], v[i], dx=dx, dy=dy)))
您当前的 for 循环正在覆盖每个索引 i 的结果。所以你并没有真正存储所有日子的数据。
您可以使用以下方法检查我的结果:
print(len(vort))
print(vort[0])
长度为 10,这意味着它收集这 10 天的数据,而不是代码中的 1 天。
请注意, myvort
是 a list
,而不是 a np.array
,但列表中的每个元素都是 a np.array
。
推荐阅读
- php - 如何使用选定的表单在 CKEditor 中显示波斯语 HTML 内容
- android-recyclerview - ComposeView 未附加到窗口 - Jetpack Compose
- json - 检查从 Laravel 8 中 eloquent 返回的特定值
- liquibase - Liquibase 错误:在一个更改集中创建主表和具有外键的表时出现“关系不存在”
- vue.js - vue 测试实用程序挂载选项数据不适用于组合 API
- python - 为什么我对所有不同的期限都得到相同的价值?
- javascript - 按值对 ajax 响应对象进行排序
- powershell - 从命令行运行 powershell 脚本,将目录作为参数传递并使用 Get-Date 格式化日期
- reactjs - 我需要一次折叠一排表格..我使用了材料(React JS)可折叠表格
- apache - 可以更改网址名称吗?