2010-06-01 56 views
0

我運行一個for循環,每次提取一個數組的某些元素,比如說element1,element2等。然後如何將我提取的所有元素集中在一起,以便得到一個列表他們?For Matlab for Matlab

回答

1

生成列表,當您去:

for i = 1:whatever 
    ' pick out theValue 
    yourList(i) = theValue 
end 

我假設你挑選出每個循環迭代一個元素。如果不是,只需維護一個計數器並使用它而不是i

另外,我是而不是,假設您每次通過循環從陣列中的相同位置拉出元素。如果你這樣做,那麼看看唐尼的建議。

+1

如果」只需添加到你的數組中,你可以使用(end + 1)而不是保留一個計數器。結果變量應在之前進行初始化,例如[]。 – Kleist 2010-06-01 22:48:28

+0

+1爲圓形參考:) – walkytalky 2010-06-01 23:00:15

+0

@Kleist:最好將變量初始化爲其最終大小,例如, 'yourList =零(無論,1)'。在一個循環內生長一個數組可以減慢循環的速度。 – Jonas 2010-06-02 01:45:09

3

約翰覆蓋for循環的基礎,所以......

注意MATLAB代碼往往是,如果你向量化它,而不是使用循環更有效(這是比以前要少真)。例如,如果在你的循環,你只是抓住一個矩陣的每一行的第一個值,而不是循環的,你可以這樣做:

yourValues = theMatrix(:,1) 

凡獨奏:經營者表示「這個指標每一個可能的值」 。如果您剛剛開始使用matlab,那麼閱讀matrix indexing in matlab(以及其他主題)絕對值得。

0

在MATLAB中,您始終可以執行循環操作。但推薦「MATLAB」的方法是避免循環:

假設你想獲得

destArray = []; 
for k=1:numel(sourceArray) 
    if isGoodMatch(sourceArray(k)) 
     destArray = [destArray, sourceArray(k)]; % This will create a warning about resizing 
    end 
end 

執行相同的任務的數組項的子集,而不循環:

matches = arrayfun(@(a) isGoodMatch(a), sourceArray); % returns a vector of bools 
destArray = sourceArray(matches);