2016-11-23 10 views
0

Я храню переменные поля, вычисленные в цикле for в векторе, добавляя значения. Однако я хотел бы предварительно распределить сначала для производительности. Я попытался процитировать эту операцию, но это не дает мне то, что я хотел бы выполнить. Я привел пример операции ниже. Как мне сделать prealocation в этом? Для скорости.Как сделать preallocation в хранении переменных поля в matlab

j=('load raw.mat'); 
var=fields(j); 
val_mat=[]; 
kk=fieldnames(j); 
for i=(length(kk)-Var_no)+1:Var_no+(length(kk)-Var_no) 
val_mat=[val_mat j.(var{i})]; 
end 
+0

Я смущен. Это даже не действительный код. Вы просто пытаетесь создать массив всех значений полей в структуре? – Suever

ответ

3

на основе кода, он выглядит, как вы пытаетесь захватить все переменные хранятся в raw.mat и сцепить их. Чтобы сделать это, вы можете заменить петлю struct2cell, чтобы преобразовать все значения полей в массиве ячеек значений, а затем использовать cat конкатенировать их

data = load('raw.mat'); 
values = struct2cell(data); 
val_mat = cat(2, values{:}); 

Поскольку мы удалили петлю, нет необходимости предварительно выделить.

Я также взял на себя смелость переписать код как действительный код MATLAB.