我想从下一个元素中提取数组中不会发生变化(在一定容差范围内)的元素。
我有一些列向量,比如m = [1; 3; 6; 8; 12]
。因此,我想提取满足m2 = abs(diff(m)) < 3
的元素。这是创建新数组m2
的正确方法,其元素是m
的相邻元素之间的差异吗?
我的问题是提取满足m
所列条件的m2
元素。
实际上我有一个9x4096阵列,因此想知道m
的哪些元素用于给出m2
的元素。
答案 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