罗兰谈MATLAB的艺术

将想法转化为MATLAB

对向量进行分区

最近在MATLAB新闻组中,有一个线程问如何将一个向量分割成一个个单调递增值为1的小块。这篇文章得到了几个答案,但我没有先读。以下是我的想法。

内容

样本数据

下面是我的示例数据。

=(2、3、4、7、9、12、13、14、15)
A = 2 3 4 7 9 12 13 14 15

问题与解决方案

我想把它分成4部分:2:4和12:15,加上标量7和9。以下是我对这个问题的看法。

首先我想要找到行数,也就是差1的元素。因此,我计算了差异,确保我在数组中包含了最终值(这就是为什么我在下面附加了一个0)。

AD = [diff(a) == 1 0]
AD = 1 1 0 0 0 1 1 1 10 0

接下来,通过观察差异中有多少个0值表示,我计算出有多少次运行。它告诉我要把原始数组分成多少个数组。

Numcells = sum(ad==0) out = cell(1, Numcells);
Numcells = 4

接下来,我通过查找位置找到块的结束索引广告是0。然后开始为单元格数组中的每个单元格创建内容,从原始数组的索引1开始。

Indends = find(ad == 0);Ind = 1;K = 1:numcells out{K} = a(ind:indends(K));indends(k)+1;结束

这就是现在看起来是这样。

出了{:}
Out = [1x3 double] [7] [9] [1x4 double] ans = 2 3 4 ans = 7 ans = 9 ans = 12 13 14 15

文件交换功能

在File Exchange上,可以获得一个更通用的函数分裂vec对分裂vec布鲁诺。它能做这个,还有更多。

是否需要对数据进行分区?

如果您需要对数据进行分区,我想了解为什么要这样做,以及如何这样做。让我知道在这里




发布与MATLAB®R2012b

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。