对向量进行分区
最近在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布鲁诺。它能做这个,还有更多。
是否需要对数据进行分区?
如果您需要对数据进行分区,我想了解为什么要这样做,以及如何这样做。让我知道在这里.
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。