如何基于现有向量生成连续相同元素对应有序整数的新向量
实现方案
MATLAB 实现(示例语法为MATLAB风格)
核心思路是用diff计算相邻元素的差值,识别分组变化位置后累加计数:
v1 = [13 13 13 13 5 5 5 2 2 5 5]; v2 = cumsum([1, diff(v1)~=0]);
运行后得到的v2和你预期的[1 1 1 1 2 2 2 3 3 4 4]完全一致。
Python 实现
基于Numpy(向量化操作,适合大向量)
import numpy as np v1 = np.array([13,13,13,13,5,5,5,2,2,5,5]) v2 = np.cumsum(np.concatenate([[1], np.diff(v1) != 0]))
纯Python原生列表实现(无需依赖第三方库)
v1 = [13,13,13,13,5,5,5,2,2,5,5] v2 = [] if v1: current_id = 1 v2.append(current_id) for idx in range(1, len(v1)): if v1[idx] != v1[idx-1]: current_id += 1 v2.append(current_id)
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

