2017-08-21 3 views
0

Je travaille sur ce sujet depuis un moment maintenant ... J'ai des données netcdf qui sont sous la forme de 684x447x72 pour chaque fichier netcdf que j'ai lu en utilisant ncread (path, myvarname, [1 1 1], [684 447 72]). J'ai besoin d'ajouter les données dans la dimension 3 pour file = 2 pour rendre la variable maintenant 684x447x144 et ainsi de suite pour chaque nouveau fichier. Ainsi, par exemple si j'ai 10 fichiers, alors le read_in_var final = 684x447x720. Comment faire cela dans une boucle en lisant un fichier à la fois? Je vous remercie!!Ajout de données Matlab à partir du fichier metcdf

Répondre

1

Utilisez matrix indexing. Compte tenu des noms de fichiers sont fichier1, fichier2, fichier3, ... file10, cela devrait fonctionner:

read_in_var = zeros(684,447,720); %Pre-allocation 
for k=1:10 
    read_in_var(:,:,72*(k-1)+1:72*k)) = ncread(['file',num2str(k),'.nc'], ... 
     myvarname,[1 1 1], [684 447 72]); 
end 
+0

salut - merci pour votre réponse, mais cette méthode ne résout pas mon problème de mémoire que je charge ces fichiers. Comme je progresse à lire les données netcdf, mon programme en utilisant votre méthode ou mine (légèrement plus rapide en utilisant une concaténation verticale de la 4e dimension du numéro de fichier ou "k" et en déplaçant cela à la 3e dimension dans read_in_var (:,:, 72 * k) fonctionne de plus en plus lentement et prend toute ma RAM sur mon bureau en attendant des idées – user2100039

+0

Que voulez-vous dire par * "ne résout pas *"? Vous n'avez pas mentionné de problème de mémoire avant. Si vous n'êtes pas intéressé en gardant les données de toutes les itérations, alors jetez-les.Pourquoi demander à * ajouter *? Si vous voulez conserver toutes ces données, alors il va certainement prendre de la mémoire et cela ne peut pas être évité à moins que vous sauvegardiez certaines données sur le disque et charger plus tard si vous voulez utiliser.Sans que vous expliquiez exactement ce que vous avez à l'intérieur de cette boucle, rien ne peut être suggéré –