2010-03-19 48 views
4

我有一个for循环遍历一个数组...构建阵列,同时在循环

for i=1:length(myArray) 

在这个循环中,我想要做的检查myArray的价值,并将其添加到另一个阵列myArray2如果它符合某些条件。我查看了MATLAB文档,但在创建数组时没有发现任何内容,没有在初始化时声明所有值或一次性读取数据。

非常感谢!

+0

你可能会发现感兴趣的以下链接: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

+1

让我把这一个添加到列表中:http://stackoverflow.com/questions/1548116/matrix-of-unknown-length-in-matlab – Amro 2010-03-19 22:42:23

回答

7

我猜你想要的东西比

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

+0

为什么你有你sed NaNs,我可以使用零还是零? – dexterdev 2014-09-19 15:36:00

+0

@dexterdev你可以,是的。 – mtrw 2014-09-21 22:34:59

2

大多数情况下,你所描述的方式就像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); 
+0

只是一小部分。看起来,掩码必须是逻辑数组。我用select = [0 1 0 1 ...]进行了测试,并得到一个错误“下标索引必须是真正的正整数或逻辑”。然后,我尝试使用select = [false true false true ...]并按预期工作。 – 2016-08-18 15:13:18