我有一個for循環遍歷一個數組...構建陣列,同時在循環
for i=1:length(myArray)
在這個循環中,我想要做的檢查myArray的價值,並將其添加到另一個陣列myArray2如果它符合某些條件。我查看了MATLAB文檔,但在創建數組時沒有發現任何內容,沒有在初始化時聲明所有值或一次性讀取數據。
非常感謝!
我有一個for循環遍歷一個數組...構建陣列,同時在循環
for i=1:length(myArray)
在這個循環中,我想要做的檢查myArray的價值,並將其添加到另一個陣列myArray2如果它符合某些條件。我查看了MATLAB文檔,但在創建數組時沒有發現任何內容,沒有在初始化時聲明所有值或一次性讀取數據。
非常感謝!
我猜你想要的東西比
myArray = [1 2 3 4 5];
myArray2 = myArray(myArray > 3);
做你問什麼,最簡單的(但最慢)的方式更復雜的是一樣的東西
myArray2 = [];
for x = myArray
if CheckCondition(x) == 1
myArray2 = [myArray2 x]; %# grows myArray2, which is slow
end;
end;
您可以排序的優化這有點像
myArray2 = NaN(size(myArray));
ctr = 0;
for x = myArray
if CheckCondition(x) == 1
ctr = ctr + 1;
myArray2(ctr) = xx;
end;
end;
myArray2 = myArray2(1:ctr); %# drop the NaNs
你也可能想看看ARRAYFUN。
大多數情況下,你所描述的方式就像mtrw在第一個例子中說的那樣。
比方說data = [1 2 3 4 5 6 7 8 9 10]
,你只想得到偶數。
select = mod(data,2)==0; % This will give a binary mask as [0 1 0 1 0 1 0 1 0 1].
如果你這樣做data2=data(select)
,它會給你[2 4 6 8 10]
。
當然,更短的方式做到這一點是因爲mrtw有例1:
data2=data(some_criteria);
只是一小部分。看起來,掩碼必須是邏輯數組。我用select = [0 1 0 1 ...]進行了測試,並得到一個錯誤「下標索引必須是真正的正整數或邏輯」。然後,我嘗試使用select = [false true false true ...]並按預期工作。 – 2016-08-18 15:13:18
你可能會發現感興趣的以下鏈接:http://stackoverflow.com/questions/1680557/optimizing -extraction-of-data-from-a-matlab-matrix,http://stackoverflow.com/questions/132092/what-are-your-favourite-matlab-octave-programming-tricks,http://stackoverflow.com/questions/1450322/matlab-excluded-data-outside-1-standard-deviation,http://stackoverflow.com/questions/2202641/how-do-i-compare-all-elements-of-two-arrays-in -matlab – mtrw 2010-03-19 22:30:27
讓我把這一個添加到列表中:http://stackoverflow.com/questions/1548116/matrix-of-unknown-length-in-matlab – Amro 2010-03-19 22:42:23