有没有办法计算和保存一个新变量,它是多个 netCDF 或 tif 文件的函数?
Posted
技术标签:
【中文标题】有没有办法计算和保存一个新变量,它是多个 netCDF 或 tif 文件的函数?【英文标题】:Is there a way to calculate and save a new variable that is a function of multiple netCDF or tif files? 【发布时间】:2021-07-02 10:18:23 【问题描述】:我有多个.nc
,它们也在.tif
文件中,我想用它们来计算基于统计模型的概率。我有 5 个文件(V1.nc
、V2.nc
、V3.nc
、V4.nc
、V5.nc
),一个统计模型是:y = 1 / (1 + exp(-(Intercept + V1 * 1.87 + V2 * 1.53 + V3 * (-4.18) + V4 * 3.58 + V5 * 9.13)))
。
我通常使用Qgis
、RStudio
和Ubuntu
,我不在乎使用这些程序中的哪一个。
我有没有办法使用这些文件来计算整体y
?
【问题讨论】:
参见 QGIS 光栅计算器的文档。 docs.qgis.org/3.16/en/docs/user_manual/working_with_raster/… 唯一的问题是没有指数函数 - 替换为 2.71828 ^ ( ... ) 【参考方案1】:您可以尝试将文件合并为一个使用
cdo cat V?.nc combined.nc
然后使用表达式命令创建一个新变量
intercept=2.3123 # or whatever the value is
cdo expr,'y=1 / (1 + exp(-($intercept + V1 * 1.87 + V2 * 1.53 - 4.18*V3 + V4 * 3.58 + V5 * 9.13)))' combined.nc newvar.nc
我假设 V1.nc 中的变量称为“V1”等,如果没有相应地替换名称。
EDIT:根据注释,每个文件使用相同的变量名。因此,要么应该在上述之前使用 NCO 在每个文件中重命名变量,要么可以使用单独的 cdo 函数组合原始文件,如下所示:
cdo -pow,-1 -addc,1 -exp -mulc,-1 -addc,$intercept -add -mulc,1.87 V1.nc -add -mulc,1.53 V2.nc -add -mulc,-4.18 V4.nc -add -mulc,3.58 V4.nc -mulc,9.13 V5.nc mynewvariable.nc
我使用管道将它放在一行中并避免中间文件,仔细检查我的方程式,但我希望它不包含错误。使用管道有助于从右到左阅读。
文件 mynewvariable.nc 中的变量也将被称为 Band1;您可能希望使用 nco 适当地更改元数据,即使文件仅供您自己使用,也要养成一个好习惯...
【讨论】:
嗨@Adrian,感谢您的回复。五个nc files
中的变量实际上都称为Band1,是否应该在cat
调用之前更改?这也是为什么当我使用cat
时变量好像是五个不同的时间戳的原因吗?再次感谢您。
是的,这会引起一些混乱...重命名变量或使用单独的 cdo 函数构建答案...我将编辑我的答案
当然是阿德里安,谢谢。我现在就试试,然后我会回来的,谢谢!
最近我从罗伯特威尔逊那里学到了一些东西,我想记住,我认为它也是使用 -L 如果你在管道时遇到核心错误,它会强制顺序 I/O 访问.以防它在尝试管道时死掉。
谢谢,它似乎工作得很好。漂亮 - 谢谢!以上是关于有没有办法计算和保存一个新变量,它是多个 netCDF 或 tif 文件的函数?的主要内容,如果未能解决你的问题,请参考以下文章