Python使用Numpy进行数组插值时简化重复编码的方案咨询
优化线性插值实现方案
你当前的代码实现的是单区间线性插值,完全可以通过numpy广播特性或者内置插值函数实现自动批量计算,无需逐段手动编写插值逻辑、指定索引参数。
方案1:numpy广播向量化实现(效率最高,无额外依赖)
把分散的输入数据规整为统一数组结构,利用numpy自动广播匹配维度,一行完成所有插值计算:
import numpy as np # 合并所有待插值数据,维度对应 [组别, 样本数, 1],和原data1/data2/data3结构对齐 data = np.array([ [(5,), (4,), (6,)], [(2,), (8,), (9,)], [(3,), (1,), (7,)] ]) # 规整插值区间参数 x_left = np.array([4, 2, 1]) x_right = np.array([6, 9, 7]) y_left = 1 y_right = 3 # 自动广播维度计算所有结果,无需手动指定索引 result = ((data - x_left.reshape(-1, 1)) / (x_right - x_left).reshape(-1, 1)) * (y_right - y_left) + y_left # 输出和原代码完全一致的结果 for group_res in result: print(group_res)
方案2:用numpy内置np.interp函数(扩展性更强)
如果后续需要扩展为多区间插值、边界值特殊处理,可以直接调用numpy内置的线性插值函数:
import numpy as np data_list = [ [(5,), (4,), (6,)], [(2,), (8,), (9,)], [(3,), (1,), (7,)] ] # 每个组别对应的x插值区间 x_intervals = [(4, 6), (2, 9), (1, 7)] # 插值目标y区间 y_range = (1, 3) for data, (x_l, x_r) in zip(data_list, x_intervals): data_arr = np.array(data) # np.interp参数:待插值点、x坐标序列、y坐标序列 cur_res = np.interp(data_arr, [x_l, x_r], y_range) print(cur_res)
内容的提问来源于stack exchange,提问作者manacoder
相关产品推荐
相关产品推荐

