我想为二进制向量中的连续运行分配一个累积数值。我有的是
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/