Matlab实现重复元素按组逐次递增1的方法求助
问题描述
现有数组:
v = [1,2,1,1,1,2,2]
需求:将1和2分为两组,每组元素每重复出现一次,对应值递增1,期望结果:
v2 = [1 1 2 3 4 2 3]
尝试过结合splitapply函数使用cumsum和movsum函数,但未成功实现需求。
解决方案
方法1:splitapply + cumsum组合
直接以数组元素作为分组标签,对每个分组内的元素做累积计数:
v = [1,2,1,1,1,2,2]; groups = v; v2 = splitapply(@(x) cumsum(ones(size(x))), v, groups);
方法2:accumarray实现索引映射计数
通过索引矩阵记录每个元素的位置与分组,生成累积计数后提取对应结果:
v = [1,2,1,1,1,2,2]; counts = accumarray([(1:numel(v))', v'], 1, [], @cumsum); v2 = counts(sub2ind(size(counts), 1:numel(v), v));
两种方法运行后均可得到期望的v2 = [1 1 2 3 4 2 3]。
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

