MATLAB: Matfile modifie la variable d’une structure

Bonjour à tous
J’ai besoin de conseils sur l’utilisation du fichier mat ().
J’ai un fichier .mat qui est une structure. Ce fichier est appelé ‘2019hydro.mat’ et est une structure subdivisée en 9 matrices 330x300x365.
Lorsque je charge le fichier, j’ai la structure ‘global_structure’ subdivisée en 9 matrices (‘smb’, ‘albedo’, ‘abl’ etc…)
Chaque jour, il y a 9 330 × 300 matrices que je calcule pour itérer dans cette structure globale en fonction du jour. Disons que nous sommes le 31 décembre, pour la variable ‘smb’ j’écrirai:
global_structure.smb (:,::, 365) = calculé_smb;
Parce que cette structure est vraiment lourde, on m’a conseillé d’utiliser matfile ().
Pour tester mon code, j’ai écrit:
m = matfile (‘2019hydro.mat’, ‘Writable’, true)
Et normalement pour itérer les matrices calculées j’écrirais:
m.global_structure.smb (:,:, 365) = calculé_smb;
Mais je reçois un message d’erreur disant « Impossible d’indexer dans ‘global_structure’ car les objets MatFile ne prennent en charge que l’indexation ‘()’. » .
Cependant, lorsque j’ouvre «m» dans l’espace de travail, j’ai 2 structures: «propriétés» et «global_structure» qui a mes 9 matrices 330x300x365.
Pourquoi puis-je voir les matrices dans ma ‘structure_globale’ en cliquant dessus depuis l’espace de travail, mais je ne peux pas y accéder depuis la fenêtre de commande en tapant ‘m.global_structure.smb’? J’ai également essayé de faire un imagesc pour afficher les données un jour spécifique (par exemple: imagesc (m.global_structure.smb (:,:, 364)) mais j’ai le même message d’erreur.
Comment puis-je me débarrasser de ce problème?
Merci de votre aide !
ps: je ne peux pas télécharger le fichier en raison de sa taille, j’espère avoir été assez clair. Au cas où je ne l’aurais pas été, j’expliquerai à nouveau mon problème plus clairement.

Meilleure réponse

  • matfile ne prend pas en charge l’indexation dans les champs struct. Lisez les limitations ici:https://www.mathworks.com/help/releases/R2020a/matlab/ref/matlab.io.matfile.html#mw_cd9f9130-9398-4df9-9729-070d19d4c781
    Vous devrez modifier la structure complète
     

    m = matfile('2019hydro.mat', 'Writable', true)
    temp = m.global_structure;
    temp.smb(:, :, 365) = calculated_smb;
    m.global_structure = temp;