如何在Python的NumPy中按指定间隔拆分数组?split函数使用遇阻
按指定数值点拆分numpy数组的解决方案
首先说你用np.split()失败的原因:numpy的split函数接收的拆分参数是数组的索引位置,不是数组里的数值。如果你直接把10、25这些数值当参数传,要么是参数格式不对(比如没放进列表),哪怕你的x是np.arange(100)、数值等于索引,也会因为参数形式错误导致无法正常拆分。
下面给你两种实现方式:
1. 针对当前数组的简易写法
因为你的x是np.arange(100),元素值和索引完全一致,直接把拆分数值放进列表传给np.split()就行:
import numpy as np x = np.arange(100) # 定义拆分的数值点 split_points = [10, 25, 45, 75, 95] # 执行拆分 split_result = np.split(x, split_points) # 验证结果 for i, part in enumerate(split_result): print(f"第{i+1}段: {part}")
执行后会得到6个子数组:[0-9]、[10-24]、[25-44]、[45-74]、[75-94]、[95-99],完全符合你的需求。
2. 通用写法(适配任意数组)
如果你的数组元素和索引不一致(比如数组是打乱的、非连续的),就需要先把拆分数值转换成对应的索引位置,用np.searchsorted()实现:
import numpy as np x = np.arange(100) split_values = [10, 25, 45, 75, 95] # 找到每个拆分数值对应的插入索引(也就是拆分位置) split_indices = np.searchsorted(x, split_values) split_result = np.split(x, split_indices)
这个方法不管数组是否有序、元素是否和索引匹配,都能正确完成拆分。
内容的提问来源于stack exchange,提问作者joehart
相关产品推荐
相关产品推荐

