Матлаб доступа к структурам - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь получить доступ к данным, которые хранятся в структурах в Matlab.Имея много файлов, я пытаюсь сделать процесс автоматическим, однако у меня есть проблема с доступом к структуре с использованием имени структуры (учитывая, что это строка).Кроме того, сохранение структуры в переменной (как показано ниже) также не работает, потому что matlab присоединяет всю структуру к переменной.У кого-нибудь есть идея, как это сделать?

%Initialize variables
Data_Struct = load(dirData(1).name);
file_id = fieldnames(Data_Struct);
data = Data_Struct.Trajectories;

Вот скриншот структуры, содержащей данные enter image description here

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

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

name = 'Trajectories'
value = Data_Struct.(name)

Таким образом, в вашем случае, чтобы получить развернутые значения в виде массива ячеек, вы можете использовать:

%%Little example copying some of your structure
Data_Struct.Trajectories.Labelled = zeros(10);
Data_Struct.Analog = zeros(10);
Data_Struct.FrameRate = 300;

[UnrolledCell] = getUnrolledVal(Data_Struct,[]);
display(UnrolledCell)

UnrolledCell =

3 × 2 массив ячеек

'Labelled'     [10×10 double]
'FrameRate'    [         300]
'Analog'       [10×10 double]

Здесь функция getUnrolledVal выглядит просто:

function [UnrolledCell] = getUnrolledVal(struct_in,UnrolledCell)
fields_list = fieldnames(struct_in);
for i=1:length(fields_list)
    field = fields_list{i};
    if isstruct(struct_in.(field))
        UnrolledCell = getUnrolledVal(struct_in.(field),UnrolledCell);
    else
        UnrolledCell = [UnrolledCell; {field} {struct_in.(field)}];
    end
end

end
0 голосов
/ 03 декабря 2018

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

Data_Struct = load(dirData(1).name);

После этой строки

name = fieldnames(Data_Struct);

Это даст вам уникальное имя вашего файла.Наконец,

data = Data_Struct.(name{1}).Trajectories.Labelled.(name of the data matrix)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...