Re: [討論] 如何將structure內各field轉存為variables?

看板MATLAB作者 (天)時間9年前 (2015/11/08 13:02), 9年前編輯推噓5(506)
留言11則, 3人參與, 最新討論串2/2 (看更多)
% 簡單的方式 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://www.ptt.cc/bbs/MATLAB/M.1446958950.A.CC7.html

11/08 14:04, , 1F
謝謝 我來研究一下!!
11/08 14:04, 1F

11/08 14:09, , 2F
我成功了!!用你最後一個sol!!感謝 (正在想避免forloop
11/08 14:09, 2F

11/08 14:21, , 3F
你好!! 我發現可以先讓a=a'再eval(a) 也可以達到目的
11/08 14:21, 3F

11/08 15:01, , 4F
嗯嗯
11/08 15:01, 4F

11/08 15:01, , 5F
第一個sol直接cellfun(@eval,a)也可以
11/08 15:01, 5F

11/08 20:39, , 6F
用struct2cell
11/08 20:39, 6F
?? 不懂 這樣怎樣做到原PO想做的事情QQ ※ 編輯: celestialgod (180.218.154.163), 11/08/2015 21:43:26

11/09 00:48, , 7F
cellfun(@(x,y) assignin('base',x,y),fieldnames(set),
11/09 00:48, 7F

11/09 00:48, , 8F
struct2cell(set));
11/09 00:48, 8F

11/09 00:48, , 9F
不過我不太懂的是,這邊只能用assignin,不能用eval
11/09 00:48, 9F

11/09 00:49, , 10F
但像樓上說的用cellfun(@eval,a)就可以
11/09 00:49, 10F

11/09 01:50, , 11F
恩恩 了解!!
11/09 01:50, 11F
文章代碼(AID): #1MFjTcp7 (MATLAB)
文章代碼(AID): #1MFjTcp7 (MATLAB)