2010-07-27 127 views
3

我在想這是否可能。我的代碼如下所示:MATLAB:如何在另一個變量名稱中使用變量值?

indexStop = find(firstinSeq(x,4) ~= ... 
       littledataPassed(y:length(littledataPassed),4), 1, 'first'); 
for z= 0:(n-1) 
    indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... 
     littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... 
     littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); 
    if isempty(indexProcess) 
     msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; 
    else 
     msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) ... 
     littledataPassed(y+indexProcess-1,:)]; 
    end 
    countmsgLength[n]= countmsgLength[n] + 1; 
end 

我希望有無處不在讀取[n]切換到的n的實際值,這樣我可以使用它來格式msgLength#數據添加到九個不同的變量。我試過搜索教程,但沒有看到有關該主題的內容。

+1

這基本上是[此的其他問題(的副本http://stackoverflow.com/questions/2809635/how-to-concatenate-a -number-to-a-variable-name-in-matlab),但是我在下面添加了一些針對您上面發佈的代碼的建議。 – gnovice 2010-07-27 18:05:26

回答

8

它幾乎總是更好的使用數組或cell arrays來存儲數據,而不是創造一堆名爲a1a2a3等。例如,您可以初始化msgLength爲單元陣列與n元素變量:

msgLength = cell(1,n); 

,您可以訪問的msgLength細胞使用大括號:

msgLength{n} = ... %# Assign something to cell n 

您的變量countmsgLength只能是一個常規的數值數組,因爲它似乎只存儲了n值。您只需將方括號更改爲括號(即[n](n))。


然而,如果你真的創建n獨立的變量,你可能會最終使用的EVAL功能。 This questionthis question顯示瞭如何使用另一個變量的值創建變量名稱的一些示例。

0

如果您絕對必須使用多個變量,那麼使用()符號的結構dynamic fieldnames會很方便。如果您輸入以下內容:

>> n = 1; 
>> data.(sprintf('msgLength%u', n)) = [1 2 3 4]; 
>> n = 2; 
>> data.(sprintf('msgLength%u', n)) = [5 6 7 8]; 

你會得到一個結構兩個領域:

>> data 
data = 
    msgLength1: [1 2 3 4] 
    msgLength2: [5 6 7 8] 

儘管如此,使用數組來存儲數據,而不是幾個變量的我第二gnovice的建議。你可以簡單地添加另一個層面msgLength所以行變成7:

msgLength(n,countmsgLength(n),:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; 
相關問題