如何将有序numpy整数数组按相邻元素差值阈值拆分?
解决方案
可以利用NumPy的数组操作高效实现这个拆分需求,步骤如下:
- 计算相邻元素的差值:用
np.diff()获取数组中每对相邻元素的差值。 - 定位拆分点:找出差值大于2的位置,这些位置就是子数组的分割边界。
- 分割数组:根据拆分点使用
np.split()完成分割。
完整代码实现:
import numpy as np arr = np.array([222, 225, 227, 228, 230, 232, 241, 243, 244, 245, 252, 253, 258]) # 计算相邻元素差值 diff = np.diff(arr) # 找到差值大于2的索引位置,加1得到分割点(split的参数是数组的分割索引) split_indices = np.where(diff > 2)[0] + 1 # 分割数组 result = np.split(arr, split_indices) # 转换为列表形式输出(按需调整) print([subarr.tolist() for subarr in result])
运行结果:
[[222], [225, 227, 228, 230, 232], [241, 243, 244, 245], [252, 253], [258]]
代码说明
np.diff(arr):生成长度为原数组长度-1的数组,每个元素对应原数组中相邻元素的差值。np.where(diff > 2)[0]:获取差值大于2的元素在diff数组中的索引,这些索引对应原数组中需要拆分的前一个元素的位置,加1后得到np.split()所需的分割索引(比如diff[0] = 3,对应原数组arr[0]和arr[1]的差,分割点就设在索引1处)。np.split(arr, split_indices):根据分割索引将原数组拆分为多个子数组,每个子数组内相邻元素的差值都不超过2。
内容的提问来源于stack exchange,提问作者quant
相关产品推荐
相关产品推荐

