如果有人向我展示了一种简单的方法,我将不胜感激。假设我在 MATLAB 中有一个向量,例如
d = [3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2]
我想找到连续数字“twos”的系列以及这些系列的长度。
数字二很容易找到x=find(d==2)
。但我想要的是得到一个包含所有连续数字二序列长度的向量,这意味着我在这种情况下的结果将是这样的向量:
[1 3 1 5 1].
有谁能帮助我吗?
如果有人向我展示了一种简单的方法,我将不胜感激。假设我在 MATLAB 中有一个向量,例如
d = [3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2]
我想找到连续数字“twos”的系列以及这些系列的长度。
数字二很容易找到x=find(d==2)
。但我想要的是得到一个包含所有连续数字二序列长度的向量,这意味着我在这种情况下的结果将是这样的向量:
[1 3 1 5 1].
有谁能帮助我吗?
这似乎有效:
q = diff([0 d 0] == 2);
v = find(q == -1) - find(q == 1);
给
v =
1 3 1 5 1
为了我
这称为游程编码。在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
经过的时间是 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 站数,其中连续值被标记为如上所述。