我的 NetCDF 文件有 4 个维度(经度、纬度、时间、水平压力)和几个变量。
我想用 [-20 -18 -16 ... -2 0 2 4 ... 18 20] 替换 [340 342 344 ... 360 0 2 4 ... 18 20] 的经度数据。事实上,经度是从 0° 到 360° 计算的,但我需要从 -180° 到 180°。
我在互联网上找到了一些想法,但我不知道如何应用它们。
这里有一个解释:
“一些 netcdf 文件包含严格的正值 [0,360],这与 gdal/QGis 处理经度值的方式不兼容 - 它们不会环绕日期变更线。这也会导致 gdalwarp 以及与其他数据集([-180,180 ] 值),由于 180 度经度偏移,它们没有正确对齐。
简单的解决方法是测试经度变量并将 [180,360] 间隔中的任何值通过减去 180 转换为 [-180,180] - 在 IReadBlock 和 SRS 检测中。”
我也读过“gdal-translate”,但我不知道如何使用它。
编辑:我的纬度也有问题,它是 N -> S(我想要它 S -> N),由于“cdo invertlat”,我将其反转
我有一个BASH脚本,它有一组很长的参数和两种调用它的方法:
my_script --option1 value --option2 value ... etc
Run Code Online (Sandbox Code Playgroud)
要么
my_script val1 val2 val3 ..... valn
Run Code Online (Sandbox Code Playgroud)
该脚本反过来编译并运行一个大型FORTRAN代码套件,最终生成一个netcdf文件作为输出.我已经拥有了netcdf输出全局属性中的所有元数据,但是包含用于创建该实验的完整运行命令也是非常好的.因此,接收netcdf文件的另一个用户可以简单地重新输入运行命令以重新运行实验,而无需将所有选项拼凑在一起.
所以这是一个很长的路要走,在我的BASH脚本中,如何从父shell输入最后一个命令并将其放入变量?即脚本问"我怎么叫?"
我可以尝试从选项列表中将它拼凑在一起,但是很长的选项列表和两个接口方法会使这个冗长而艰巨,我相信有一个简单的方法.
我发现这个有用的页面:
但这似乎只能在脚本本身内执行最后一个命令.提问者也提到了历史的使用,但答案似乎暗示历史只会在程序完成后包含命令.
非常感谢你们中的任何人有任何想法.
我想在 netcdf 文件中将常量c以下的所有值设置为c本身:file.nc
使用气候数据运营商 (CDO) 的解决方案是
cdo mul -gec,$c file.nc file.nc t1.nc
cdo add -mulc,$c -ltc,$c file.nc t1.nc output.nc
rm -f t1.nc
Run Code Online (Sandbox Code Playgroud)
但是有没有更简洁/更短的方法来做到这一点?
只要以标准方式定义,CDO 就可以根据纬度和经度裁剪 netcdf 文件,而且我知道,如果您知道所需的索引范围,NCO 可以沿任何维度裁剪 netcdf 文件的子集,如此相关问题的答案所述:
但是,我想知道 ncks hyperslabber 是否可以直接处理维度的值,而不是索引值?
我试图通过输入以下命令从多变量netcdf文件中提取变量:
ncks -v ta temp1.nc out.nc
Run Code Online (Sandbox Code Playgroud)
但是,然后我查看out.nc标头,所有变量仍然存在。
temp1.nc和out.nc的标头如下:
--- temp1.nc header ---
dimensions:
time = UNLIMITED ; // (124 currently)
lon = 256 ;
bnds = 2 ;
lat = 128 ;
lev = 40 ;
variables:
double time(time) ;
time:standard_name = "time" ;
time:long_name = "time" ;
time:units = "days since 1850-1-1" ;
time:calendar = "365_day" ;
time:axis = "T" ;
double lon(lon) ;
lon:standard_name = "longitude" ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:axis = "X" …Run Code Online (Sandbox Code Playgroud) 如何在不使用scipy的情况下计算python中正态分布的累积分布函数?
我特别指的是这个功能:
from scipy.stats import norm
norm.cdf(1.96)
Run Code Online (Sandbox Code Playgroud)
我有一个在Heroku上运行的Django应用程序,并且在Heroku上运行起来非常麻烦.因为我只需要这个来自scipy的函数,所以我希望我可以使用替代方法.我已经在使用numpy和pandas了,但我找不到那里的功能.我可以使用任何替代包,甚至自己实现它?
CDO 似乎对我来说工作得很好,直到我遇到了这个。我有一个从 2101 年到 2228 年的每日数据的 netcdf,并且我想获取一个仅包含从 2101 年到 2227 年的年份的文件,所以我运行:
cdo selyear,2101/2227 in.nc out.nc
Run Code Online (Sandbox Code Playgroud)
但输出文件的内存大小是输入文件的四倍多!它似乎具有正确的时间步数,并且初始日期和结束日期都是正确的。另外,纬度和经度似乎与输入相同,所以我想知道为什么文件大小如此。
本质上,这是这个问题的转帖:https ://confluence.ecmwf.int/pages/viewpage.action?pageId =149341027
我已经从 CDS 下载了 ERA5。对于从每个考虑年份的 1 月 1 日到 12 月 31 日的每个日历日,输入文件具有 24 小时步长(0、1、2、3、4、...、23)。
ECMWF 在此声明https://confluence.ecmwf.int/display/CKB/ERA5%3A+How+to+calculate+daily+total+precipitation必须通过累加 1979 年 1 月 1 日的降水来计算每日总降水量1 月 1 日的第 1、2、...、23 步和 1 月 2 日的第 0 步。这意味着 1979 年 1 月 1 日的第 0 步不包括在当天的总降水量计算中。为了计算 1979 年 1 月 2 日的总降水量,我们还使用当天的步骤 1、2、3、...、23 加上 1 月 3 日的步骤 0,依此类推。
在 python 中似乎有一个选项可以这样做:
import xarray as xr # import xarray library
ds_nc = xr.open_dataset('name_of_your_file.nc') # read the file
daily_precipitation = …Run Code Online (Sandbox Code Playgroud) 我有每日时间分辨率的气候数据,并希望按月和按年计算有降水(例如,大于 1 毫米/天)的天数。
我试过eca_pd,1and eca_rr1,但这些命令返回所有年份的雨天总数。
例如, cdo eca_pd,1 infile outfile
是否有命令返回每个月和/或年的雨天?
我有兴趣使用该pynco包在 python 中压缩 NetCDF 文件。在命令行中,我通常会使用:
nccopy -d 3 input_file.nc output_file.nc
Run Code Online (Sandbox Code Playgroud)
在 python 中,我尝试了以下操作:
from nco import Nco
Nco.nccopy(input='input_file.nc', output='output_file.nc', options=['-d 1'])
Run Code Online (Sandbox Code Playgroud)
这会产生属性错误'Nco' has no attribute 'nccopy'。是否nccopy支持pynco?