有没有办法计算和保存一个新变量,它是多个 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.ncV2.ncV3.ncV4.ncV5.nc),一个统计模型是:y = 1 / (1 + exp(-(Intercept + V1 * 1.87 + V2 * 1.53 + V3 * (-4.18) + V4 * 3.58 + V5 * 9.13)))

我通常使用QgisRStudioUbuntu,我不在乎使用这些程序中的哪一个。

我有没有办法使用这些文件来计算整体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 文件的函数?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在列表中获取多个元素内部文本来计算 GTM 中自定义变量的平均值?

保存提到用户的角色

R:按组计算多个相关性(并将输出保存到 csv 文件)

R中有没有办法创建一个新列,根据其他列分配值? [复制]

使用电子在本地保存文件

迁移房间数据库时有没有办法使用迁移期间计算的变量?