загрузка переменной из файла .mat в переменную с другим именем - PullRequest
7 голосов
/ 02 февраля 2012

Допустим, у меня есть файл .mat с несколькими экземплярами одинаковой структуры, каждый из которых имеет свое имя переменной.

Я хочу обработать каждый экземпляр, найденный в файле (который я нахожу, используя whos('-file' ...),Я надеялся, что load позволит мне указать имя назначения для переменной, чтобы мне не приходилось беспокоиться о коллизиях (и чтобы мне не приходилось писать самоизменяющийся код в стиле eval).

Кажется, что грубым способом сделать это является создание вспомогательной функции, которая, используя переменные с именами, которые, как мы надеемся, не конфликтуют с содержимым .mat, выполняет что-то вроде:

  1. Делает whos в файле, чтобы получить содержащиеся имена.
  2. Итеративно загружает каждую содержащуюся структуру.
  3. Использует eval, чтобы назначить загруженную структуру, скажем, в массив ячеек (где один столбец массива содержит имена структур файла .mat и соответствующий столбец с фактическим содержимым каждой структуры из файла .mat).

Нет более элегантного способа сделать то же самое?вещь

Ответы [ 2 ]

8 голосов
/ 02 февраля 2012

Конечно можно!Просто используйте load с выходным аргументом.

x = 1;
save foo;

ls = load('foo.mat');
ls.x
4 голосов
/ 02 февраля 2012

вы можете load данные в файле MAT в структуру

ws = load('matlab.mat');

поля структуры ws будут переменными в файле MAT.Тогда вы даже можете иметь массив ячеек структур

ws{1}=load('savedWorkSpace_1.mat');
ws{2}=load('savedWorkSpace_2.mat');

Пример

>> x = 1;
>> save ws_1;
>> x = 2;
>> y = 1;
>> save ws_2
>> clear
>> ws{1} = load('ws_1.mat')
>> ws{2} = load('ws_2.mat')
>> ws{1}.x
    x = 1
>> ws{2}.x
    x = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...