2017-10-16 5 views
0

Ich habe netCDF mehrdimensionales Array von folgenden Form enthält:Wie invertiere ich ein multidimensionales Array in NetCDF entlang 1 Dimension?

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

..and I würde entlang 2. Dimension invertieren und erhalten möchte :

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

ich habe versucht:

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

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

nc_close(test_object) 

..aber dies das Objekt nicht umkehren und ich auch nicht bin bekommen irgendeinen Fehler.

Vielen Dank im Voraus! Marek

Antwort

-1

Bitte geben Sie einige minimal reproduzierbare Beispieldaten mit Ihrem Code an (https://stackoverflow.com/help/mcve).

In Ihrem Code lesen Sie die Daten in Ihren R-Arbeitsbereich und invertieren die Daten, aber Sie haben es nie zurück in die NetCDF-Datei geschrieben. Unter der Annahme, dass Ihre Variable genannt wird „hwmid“ in der NetCDF-Datei können Sie in die Datei schreiben, nachdem Umkehren mit:

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

Danke ... das war ein anderer Teil meiner Frage indirekt - ich vermisste auch das ... Aber das Problem ist, dass das "hwmid" -Objekt nach hwmid <-hwmid [, 412: 1, nicht invertiert bleibt, , ... ... teile ich die Datei über den folgenden Link: https://drive.google.com/drive/folders/0ByPJ-UkVdXZgUl9TRmdwb2hDaXc – Marek

+0

Ein minimales reproduzierbares Beispiel (wie zB in Heikkis Antwort) wäre besser als das Teilen der ganzer Datensatz Wenn Sie ein Array verwenden (wie in Heikkis Antwort), sollte die Neuordnung funktionieren. Warum der Downvote? –

+0

Hallo wieder, ich bin ziemlich neu zu Stackoverflow .. wenn ich versehentlich etwas abstimmte ich entschuldige mich aufrichtig ... es war aus Versehen !!!! – Marek

0

darauf hindeutet, dass das Objekt vom Typ Array ist, kann die Reihenfolge der incices wie geändert wird folgt in dem folgenden dreidimensionalen Beispiel:

> 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 

Ähnliches Verhalten sollte auch in höheren Dimensionen stattfinden.

+0

Das war nicht das, was ich wollte (die Dimensionen tauschen) ... Ich muss nur eine Dimension (Breitengrade) umkehren ... im Grunde habe ich Europa "auf den Kopf gestellt" ... aber danke vielmals für deine Mühe! – Marek

Verwandte Themen