看板 MATLAB 關於我們 聯絡資訊
% 簡單的方式 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
kusoer1017: 謝謝 我來研究一下!! 11/08 14:04
kusoer1017: 我成功了!!用你最後一個sol!!感謝 (正在想避免forloop 11/08 14:09
kusoer1017: 你好!! 我發現可以先讓a=a'再eval(a) 也可以達到目的 11/08 14:21
celestialgod: 嗯嗯 11/08 15:01
celestialgod: 第一個sol直接cellfun(@eval,a)也可以 11/08 15:01
sunev: 用struct2cell 11/08 20:39
?? 不懂 這樣怎樣做到原PO想做的事情QQ ※ 編輯: celestialgod (180.218.154.163), 11/08/2015 21:43:26
sunev: cellfun(@(x,y) assignin('base',x,y),fieldnames(set), 11/09 00:48
sunev: struct2cell(set)); 11/09 00:48
sunev: 不過我不太懂的是,這邊只能用assignin,不能用eval 11/09 00:48
sunev: 但像樓上說的用cellfun(@eval,a)就可以 11/09 00:49
celestialgod: 恩恩 了解!! 11/09 01:50