Сохранение и загрузка структуры массива MATLAB

#matlab #structure #mat-file

#matlab #структура #mat-файл

Вопрос:

Я пытаюсь сохранить и загрузить структурные массивы в MAT-файле, но структурный массив продолжает меняться каждый раз, когда я его перезагружаю. Если сохранить следующее и перезагрузить его, он продолжит добавлять struct впереди.

 struct.field1
struct.field2

save data.mat struct

struct = load('data.mat');
  

Я знаю, что это происходит, потому что я загружаю файл в переменную, которая делает его структурой, и этого не произойдет, если я использую только:

 load('data.mat')
  

Однако я вызываю команду load внутри функции и поэтому не могу ее использовать. У кого-нибудь есть идея, как это решить, чтобы я не получал:

 struct.struct.struct.struct.struct.field1;
struct.struct.struct.struct.struct.field2;
  

после нескольких раз перезагрузки файла data.mat, но только это:

 struct.field1;
struct.field2;
  

С уважением,

Романо

Комментарии:

1. Вы имеете в виду, что вы не знаете имя переменной, которая будет загружена с помощью load команды?

2. Я знаю имя, потому что я сам его сохранил, но я не знаю, как решить проблему, не получая struct.struct.struct.struct.etc…

3. Тогда почему вы не можете просто load('data.mat','structure_name') ввести функцию и вернуть structure_name ? Зачем вам вообще нужно присваивать его переменной?

4. Потому что просто простая загрузка (‘data.mat’); не работает внутри функции. Но load(‘data.mat’,’structure_name’); работает. Спасибо 😉

5. load('data.mat') к вашему сведению, также работает внутри функции

Ответ №1:

Чтобы избежать добавления более глубоких вложенных структур, вы можете сохранить все поля как отдельные переменные, используя параметр содержимого -struct

 MystructName.field1 = 0
MystructName.field2 = 1

save('data.mat', '-struct', 'MystructName')
  

Затем загрузите данные в переменную, и я увижу, что структура не изменилась

 MyStructName = load('data.mat')
MyStructName = 
    field1: 0
    field2: 1
  

Ps. Возможно, это только в вашем примере, но присвоение вашей структуре struct имени плохо, поскольку оно перезаписывает встроенную функцию Matlab с именем struct .

Комментарии:

1. Спасибо за этот ответ. Да, фрагмент кода — это всего лишь пример.