Я не могу проверить, значительно ли он быстрее, используя только 2 строки, которые вы привели в качестве примера, но я ожидаю, что этот метод будет быстрее, когда число элементов tmp
будет расти.
Идея состоит в том,чтобы записать все инструкции присваивания, содержащиеся в tmp
, в текстовый файл (на самом деле .m
файл), затем просто выполните файл .m
.Для большого количества строк я бы ожидал, что это будет намного быстрее, чем многократный вызов eval
в цикле.
Итак, это работает отлично с вашим примером tmp
, в итоге вы получитеструктура testData
в вашем рабочем пространстве.
%% Create an '.m' file containing all the assignment instructions from the cell array
tmpFile = 'tmpFile2execute.m' ;
fidw = fopen( tmpFile , 'w' ) ;
fprintf(fidw,'%% Auto generated file\n'); % or any other header line you want, or none...
for i = 1 : numel(tmp) ;
fprintf(fidw,'%s ;\n',tmp{i});
end
fclose(fidw) ;
% (optional) only to keep workspace tidy
clear i fidw tmpFile tmp
%% Execute the file
tmpFile2execute ;
Расширяя идею, вы могли бы сделать это function
вместо script
, где вы могли бы добавить некоторую постобработку и вернуть результатв переменной, а не непосредственно в рабочей области, но вы должны увидеть, приносит ли базовая идея какое-либо улучшение скорости.