#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. Спасибо за этот ответ. Да, фрагмент кода — это всего лишь пример.