作者celestialgod (天)
看板MATLAB
标题Re: [讨论] 如何将structure内各field转存为variables?
时间Sun Nov 8 13:02:27 2015
% 简单的方式
set.ele1 = 1;
set.ele2 = 0.5;
set.ele3 = [10,5];
names_set = fieldnames(set);
for i = 1:length(names_set)
eval([names_set{i}, '=set.', names_set{i}, ';'])
end
% 透过你提供的程式
a = {'ele1 = set.ele1;','ele2 = set.ele2;','ele3 = set.ele3;'};
eval(a)
% Error: Undefined function 'eval' for input arguments of type 'cell'.
% sol:
for i = 1:length(a)
eval(a{i});
end
a = char(a);
eval(a)
% Error: Undefined function 'eeellleee123' for input arguments of type 'char'.
% sol:
for i = 1:size(a, 1)
eval(a(i, :));
end
char matrix会出错的原因是因为matlab的矩阵是行先排
这意思是
ele1 = ...
ele2 = ...
ele3 = ...
他会纵得先读,也就是最後会变成 eeellleee123 ===
当然就出错了XD
※ 引述《kusoer1017 (如果是你..可以喔)》之铭言:
: 各位前辈大家好
: 我成功让函数输出structure了
: 现在希望让structure中每个field
: 依照其field名称生成variables
: 而内容则为原先variables的内容
: 如
: set =
: electronicdelay: 1.0900
: timeinterval: 0.0250
: res: 0.7000
: wavenumber: [7259x1 double]
: Nwavenumber: 7259
: Ntime: 4000
: time: [1x4000 double]
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.218.154.163
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1446958950.A.CC7.html
1F:推 kusoer1017: 谢谢 我来研究一下!! 11/08 14:04
2F:推 kusoer1017: 我成功了!!用你最後一个sol!!感谢 (正在想避免forloop 11/08 14:09
3F:推 kusoer1017: 你好!! 我发现可以先让a=a'再eval(a) 也可以达到目的 11/08 14:21
4F:→ celestialgod: 嗯嗯 11/08 15:01
5F:→ celestialgod: 第一个sol直接cellfun(@eval,a)也可以 11/08 15:01
6F:推 sunev: 用struct2cell 11/08 20:39
?? 不懂 这样怎样做到原PO想做的事情QQ
※ 编辑: celestialgod (180.218.154.163), 11/08/2015 21:43:26
7F:推 sunev: cellfun(@(x,y) assignin('base',x,y),fieldnames(set), 11/09 00:48
8F:→ sunev: struct2cell(set)); 11/09 00:48
9F:→ sunev: 不过我不太懂的是,这边只能用assignin,不能用eval 11/09 00:48
10F:→ sunev: 但像楼上说的用cellfun(@eval,a)就可以 11/09 00:49
11F:→ celestialgod: 恩恩 了解!! 11/09 01:50