迭代数组并提取满足MATLAB条件的元素

时间:2014-01-15 15:55:13

标签: arrays matlab matrix

我想从下一个元素中提取数组中不会发生变化(在一定容差范围内)的元素。

我有一些列向量,比如m = [1; 3; 6; 8; 12]。因此,我想提取满足m2 = abs(diff(m)) < 3的元素。这是创建新数组m2的正确方法,其元素是m的相邻元素之间的差异吗?

我的问题是提取满足m所列条件的m2元素。

实际上我有一个9x4096阵列,因此想知道m的哪些元素用于给出m2的元素。

2 个答案:

答案 0 :(得分:1)

由于m2的元素是逻辑0/1,您可以使用find()来提取所需的元素和索引。

m = [1; 3; 6; 8; 12];
m2 = abs(diff(m)) < 3;
ind = find(m2);   % stores the indexes of elements that you want
m3 = m(m2);       % stores the values that you want

然后

ind =
     1
     3    

m3 =
     1
     6

在此之后,ind存储您想要的元素的索引,m3是相应的值。

答案 1 :(得分:0)

你应该使用logical indexing,实际上如果你在MATLAB编辑器中输入它,MATLAB会建议这样做。这是因为逻辑索引比使用find esp要快得多。对于非常大的数组,例如你的。

>> m = [1; 3; 6; 8; 12];   % <5x1 double>
>> m2 = abs(diff(m)) < 3;  % <5x1 logical>
>> m3 = m(m2);  %            <2x1 double>
>> m3
m3 =
    1
    6
>> m2
m2 =
    1
    0
    1
    0

只有在必须知道索引的值而不仅仅是索引值时才使用find。

>> ind = find(m2);
>> ind
ind =
    1
    3