如何在NumPy数组每两个相邻元素间插入二者的平均值
实现方案
核心逻辑:输入数组长度为n时,输出数组长度为2n - 1,偶数索引位保留原元素,奇数索引位存放相邻两个原元素的平均值。
方法1:索引赋值法(性能最优)
直接创建目标长度的空数组,分别给奇偶索引位赋值,无多余内存操作,适合处理大数组:
import numpy as np x = np.array([1, 3, 5, 7, 9]) res_len = 2 * len(x) - 1 result = np.empty(res_len, dtype=x.dtype) # 偶数位赋值原数组元素 result[::2] = x # 奇数位赋值相邻元素平均值 result[1::2] = (x[:-1] + x[1:]) / 2 print(result) # 输出:[1 2 3 4 5 6 7 8 9]
方法2:线性插值法(扩展性最强)
调用NumPy内置的插值函数实现,调整插值密度时只需修改linspace的参数即可:
import numpy as np x = np.array([1, 3, 5, 7, 9]) n = len(x) old_idx = np.arange(n) # 生成间隔为0.5的新索引坐标 new_idx = np.linspace(0, n-1, 2*n -1) result = np.interp(new_idx, old_idx, x) # 如果需要整数类型输出可以加类型转换 # result = result.astype(int) print(result) # 输出:[1. 2. 3. 4. 5. 6. 7. 8. 9.]
方法3:堆叠展平法(代码最短)
通过数组堆叠+展平实现,代码更精简:
import numpy as np x = np.array([1, 3, 5, 7, 9]) result = np.column_stack([x[:-1], (x[:-1] + x[1:])/2]).ravel() result = np.append(result, x[-1]) print(result) # 输出:[1. 2. 3. 4. 5. 6. 7. 8. 9.]
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

