基于索引分割1D numpy数组:寻求更简洁的连续值分割方案
简洁实现numpy数组按相邻元素差值分割
嘿,这个需求用numpy的矢量化操作就能轻松搞定,完全不用写复杂的逻辑判断,代码简洁又高效!
实现步骤
- 计算相邻元素的差值:用
np.diff()快速得到数组中每对相邻元素的差值数组; - 定位分割点:找出差值大于1的位置,分割点是这些位置的下一个索引(因为差值的索引对应原数组中前一个元素的位置,比如索引3的差值对应原数组第3和第4个元素的差,分割点就在第4个元素的位置,也就是索引4);
- 分割数组:用
np.split()根据分割点直接拆分原数组。
完整代码示例
import numpy as np # 示例数组 arr = np.array([77, 78, 79, 80, 90, 91, 92, 100, 101, 102, 103, 104]) # 计算相邻元素差值 diffs = np.diff(arr) # 获取分割点索引 split_indices = np.where(diffs > 1)[0] + 1 # 分割数组 sub_arrays = np.split(arr, split_indices) print(sub_arrays) # 输出结果:[array([77, 78, 79, 80]), array([90, 91, 92]), array([100, 101, 102, 103, 104])]
为什么这个方法更好?
- 全程用numpy的内置矢量化函数,避免了手动循环,代码更简洁易读;
- 矢量化操作在处理大型数组时,效率比循环判断高得多,性能优势明显。
内容的提问来源于stack exchange,提问作者The Dude
相关产品推荐
相关产品推荐

