2012-01-31 50 views
2

我有重複的一組存儲在不同的文件夾的數據的處理。每次處理某個文件夾數據時,我都需要新的變量名稱,因爲在初始處理完成後需要將結果分開,以便進行更多處理。 例如在重複功能的每一個新的塊的開始我聲明集陣列使用strcat的創建動態變量名

Set_1 = zeros(dim, number);

vectors_1 = zeros(dim, number); 

對於下一組數據的我需要:

`Set_2 = .........` 

等。這些集合中會有很多,所以我需要一種方法來自動創建這些變量,並且在函數中使用新的變量名稱,同時在完成所有功能後保持它們是分開的。

我第一次使用strcat('Set_1',int2str(number)) = zeros(dim, number)嘗試,但這個是不行的,我相信,因爲這意味着我將嘗試設置一個數組作爲一個字符串。我確定必須有一種方法來創建一個函數,並且動態地創建變量,但它似乎超出了我的範圍,所以它可能非常明顯,所以如果有人能告訴我一個很棒的方法。

回答

10

我不會做這樣。這是一個壞習慣,最好使用單元陣列或結構來保存多個集合。每個領域有一個小的開銷(大小方面),但稍後維護會更容易。

如果你真的想要做你組成的字符串使用eval

+0

能否請你解釋更多關於如何使用電池陣列或動態變量名的結構數據類型? 我用這讓用戶設置的變量的名稱: 的eval([var2n '=' num2str(var2v)]); 其中,var2n是用戶輸入的字符串 – pythonista 2012-01-31 20:41:20

+3

對動態字段名稱使用帶「dot-paren」表示法的結構。 's = struct; n = 12; var2v ='123.456'; var2n = sprintf('foo_%d',n);秒。(var2n)= num2str(var2v);' – 2012-01-31 21:17:48

+2

或使用單元陣列:'Sets = cell(nSets,1); vectors = cell(nSets,1);對於k = 1:nSets,集合{k} =零(dim,number);向量{K} =零(暗淡,數);結束' – jpjacobs 2012-02-01 08:12:52

4

MATLAB函數genvarname做你想做的。在你的情況下,它看起來是這樣的:

eval(genvarname('Set_', who)) = zeros(dim, number); 

然而,我會按照以前的答案的建議,並使用電池或結構來存儲結果。