迷失缠绵情愫中 发表于 2019-8-14 15:20:44

matlab-统计向量中连续出现的数字并计数


例如对于一个行向量 ,我想要统计其中连续1的位置以及连续出现的次数,有下面两种方法:

1. 利用 diff 函数
diff: 求前后两项之差,diff(X)= 。

A = ;
k = diff()         %对A前后补0之后再使用diff,补0是为了保证对于A的第一个和最后一个元素是1的情况,也能够通过diff求得1或-1,然后再根据1和-1来寻找连续1的位置和个数
ind = find(k==1)            %1出现的位置即连续1出现的位置
num = find(k==-1)-ind       %-1和1出现的位置差即连续1出现的个数
其中 ind 是出现连续1的首尾的索引,num 是该连续1出现的个数。这里 ind = , num = ,也就是说 A 向量中4这个位置开始出现连续1,连续出现3次。同理8位置开始出现连续1,连续出现2次。

2. 转换成字符串之后用正则表达式进行匹配
A = ;
Ach = num2str(A); Ach(Ach==' ') = [];            %将A转换为字符串
= regexp(Ach,'1*','start','end');    %匹配字符串连续1的位置
num = indEnd-ind+1;
很多这种统计向量中数的问题都可以转化为检测连续1出现次数,例如统计向量A中连续数字出现的位置和次数,A = , 那么进行一次转换:k = diff(A)==1,就可以得到 k=,其中 k 中连续1出现的位置是 A 中连续数字出现的位置,k中连续1出现的次数加1就是 A 中连续数字出现的次数。


页: [1]
查看完整版本: matlab-统计向量中连续出现的数字并计数