2017-10-16 139 views
0

我有一个包含的netCDF以下形状的多维数组:如何反转一维中存储在NetCDF中的多维数组?

[1:424,1:412,1:3,1:130]

..和我想沿第二维反相并得到:

[1:424,412:1,1:3,1:130]

我尝试:

test_object <- nc_open("~/work/macro/COOR_2_INDICES/test.nc") 
hwmid <- ncvar_get(test_object) 

hwmid<-hwmid[,412:1,,] 

nc_close(test_object) 

..但这种不倒置对象,并且还我不得到出现任何错误。

非常感谢提前! Marek

回答

-1

请用您的代码(https://stackoverflow.com/help/mcve)提供一些最小可重现的示例数据。

在您的代码中,您将数据读入您的R工作区并倒置数据,但您从未将其写回NetCDF文件。 假设你的变量在创建NetCDF文件名为“hwmid”,你可以用反相后写入文件:

ncvar_put(nc = test_object, 
    varid = "hwmid", 
    vals = hwmid, 
    start = c(1,1,1,1), 
    count = c(424, 412, 3, 130)) 
+0

谢谢...这是我的间接问题的其他部分 - 我也错过了这个......但问题是,“hwmid”对象在hwmid <-hwmid [,412:1, ,] ...我通过以下链接共享文件:https://drive.google.com/drive/folders/0ByPJ-UkVdXZgUl9TRmdwb2hDaXc – Marek

+0

提供一个最小可重现的例子(例如在Heikki的答案中)会比分享整个数据集。如果你使用一个数组(如同Heikki的回答一样),重新排序应该是有效的。为什么downvote? –

+0

你好,我是相当新的Stackoverflow ..如果我不小心倒了投票的东西,我真诚道歉...这是错误的! – Marek

0

提示该对象类型的数组,incices的顺序可以改变在下面的三维示例中:

> three_d_array <- array(
+ 1:8, 
+ dim = c(2, 2, 2), 
+ dimnames = list(
+  c("one", "two"), 
+  c("ein", "zwei"), 
+  c("un", "deux") 
+ ) 
+) 
> three_d_array[,1:2,] 
, , un 

    ein zwei 
one 1 3 
two 2 4 

, , deux 

    ein zwei 
one 5 7 
two 6 8 

> three_d_array <- three_d_array[,2:1,] 
> three_d_array 
, , un 

    zwei ein 
one 3 1 
two 4 2 

, , deux 

    zwei ein 
one 7 5 
two 8 6 

类似的行为也应该发生在更高的维度。

+0

这不是我想要的(交换尺寸)......我需要反转一维(纬度)......基本上我有欧洲“颠倒”......但是非常感谢你的努力! – Marek

相关问题