连续数字系列(不同长度)

ale*_*lex 6 matlab vector run-length-encoding

如果有人向我展示了一个简单的方法,我将不胜感激.假设我在MATLAB中有一个向量

d = [3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2]
Run Code Online (Sandbox Code Playgroud)

我想找到连续数字"twos"系列和那些系列的长度.

数字二十可以很容易找到x=find(d==2).但我想要的是得到一个包含所有连续数字序列的长度的向量,这意味着我在这种情况下的结果将是这样的向量:

[1 3 1 5 1].
Run Code Online (Sandbox Code Playgroud)

谁可以帮助我?

Max*_*Max 9

这似乎有效:

q = diff([0 d 0] == 2);
v = find(q == -1) - find(q == 1);
Run Code Online (Sandbox Code Playgroud)

v =

   1   3   1   5   1
Run Code Online (Sandbox Code Playgroud)

为了我


Joh*_*lby 6

这称为行程编码.在http://www.mathworks.com/matlabcentral/fileexchange/4955-rle-deencoding上有一个很好的m文件.此方法通常比先前发布的diff/find方式更快.

tic
d_rle = rle(d==2);
d_rle{2}(d_rle{1}==1);
toc
Run Code Online (Sandbox Code Playgroud)

经过时间为0.002632秒.

tic
q = [0 diff([0 d 0] == 2)];
find(q == -1) - find(q == 1);
toc
Run Code Online (Sandbox Code Playgroud)

经过的时间是0.003061秒.