循环时构建数组

时间:2010-03-19 22:22:57

标签: matlab arrays

我有一个for循环遍历一个数组......

for i=1:length(myArray)

在这个循环中,我想检查myArray的值,如果满足某些条件,则将其添加到另一个数组myArray2。我查看了MATLAB文档,但是没有在创建数组时找到任何内容,而没有在初始化时声明所有值或一次性将数据读入其中。

非常感谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]

当然,执行此操作的较短方式与示例1中的mrtw相同:

data2=data(some_criteria);