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

Matlab 连续数字系列(不同长度),matlab,vector,run-length-encoding,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] 我想找出连续数“two”的序列以及这些序列的长度 数字2可以通过x=find(d==2)轻松找到。但我想得到的是一个向量,它包含所有连续数字2序列的长度,这意味着我在这种情况下的结果是这样一个向量: [1 3 1 5 1]. 有人能帮我吗 这似乎有效: q = diff([0 d 0] == 2); v = find(q

如果有人告诉我一个简单的方法,我会很感激的。假设我在MATLAB中有一个向量,比如

d = [3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2]
我想找出连续数“two”的序列以及这些序列的长度

数字2可以通过
x=find(d==2)
轻松找到。但我想得到的是一个向量,它包含所有连续数字2序列的长度,这意味着我在这种情况下的结果是这样一个向量:

[1 3 1 5 1].
有人能帮我吗

这似乎有效:

q = diff([0 d 0] == 2);
v = find(q == -1) - find(q == 1);
给予


对我来说,这称为运行长度编码。有一个很好的m文件可用于它在。此方法通常比以前发布的diff/find-way更快

tic
d_rle = rle(d==2);
d_rle{2}(d_rle{1}==1);
toc
运行时间为0.002632秒

tic
q = [0 diff([0 d 0] == 2)];
find(q == -1) - find(q == 1);
toc

运行时间为0.003061秒。

如果我们想要连续值所在的原始矩阵的索引,该怎么办?此外,如果我们想要一个与原始矩阵大小相同的矩阵,其中连续值的数量存储在连续值的索引中,该怎么办?例如:

  original_matrix = [1 1 1;2 2 3; 1 2 3];

  output_matrix = [3 3 3;2 2 0;0 0 0];
该问题与气象数据质量控制有关。例如,如果我有一个来自多个传感器的温度数据矩阵,我想知道哪些天的连续值是恒定的,有多少天是恒定的,这样我就可以将数据标记为可能有故障


温度矩阵是天数x站点数量,我想要一个输出矩阵,也是天数x站点数量,其中连续值被标记为如上所述

是的-rle()只有一个对find()的调用,find()非常漂亮slow@Max很好…我从来没有打开它来找出原因。谢谢谢谢你的回答:)!相关问题:如果v不是向量,是动态的,怎么办?如果成功的次数是连续5次,那么获胜?你能帮忙吗@MAX@pac-对不起,我不太明白你的问题。
v
将不是向量的唯一方法是,如果只有一次2的运行,那么它将是一个标量,或者如果不存在2,那么它将是
[]
。我不知道你这里所说的“动态”是什么意思-可以更明确一点吗?是的,这里有一个向量@max,我的问题是;假设有一个函数将重复10次。在每次运行期间,v将为1或0。我所说的动态是指不要等待10次,保存v值,然后找到n个连续的1。我的意思是测试将在函数的每次运行期间进行。希望我说得很清楚,谢谢你的回答。
  original_matrix = [1 1 1;2 2 3; 1 2 3];

  output_matrix = [3 3 3;2 2 0;0 0 0];