arrays - 为数值运行分配顺序计数

标签 arrays matlab sequences

我想为二进制向量中的连续运行分配一个累积数值。我有的是

x = [0 0 0 1 1 0 1 1 1 0 1 0 0 0 0 0 0],

我想要的是

y = [1 2 3 1 2 1 1 2 3 1 1 1 2 3 4 5 6].

使用 sum/cumsum/unique/find range of functions 的解决方案暗示了我。任何帮助将不胜感激。

最佳答案

这里有一个方法:

a = arrayfun(@(x)(1:x), diff(find([1,diff(x),1])), 'uni', 0);
[a{:}]

我们的想法是生成一个“行程长度”列表,即 [3,2,1,3,1,1,6] 在您的情况下,然后只需连接一堆计算该列表中每个值的向量,即 cat(2, 1:3, 1:2, 1:1, 1:3...。我使用 arrayfun 作为重新应用 : 运算符的快捷方式,然后使用 {:} 返回的逗号分隔列表作为连接的快捷方式。

关于arrays - 为数值运行分配顺序计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27920036/

相关文章:

圆形阵列人口

c - 一起打印多行字符串

matlab - 为什么 isequaln(f, simplify(f)) 为假?

f# - 如何在没有 "printf"的情况下调用 Seq.whatever 中的函数?

php - 如何使用多维数组中的值对多维数组进行排序?

c - 循环后打印问号

matlab - 如何从变量中手动输出发布内容

C99 相当于 MATLAB "filter"?

python - 删除行更改(换行符)

f# - Seq.groupBy 是否保留组内的顺序?