You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何无迭代实现2D折线数据点的密度加倍

解决方案

方案1:纯NumPy向量化实现(仅适用加倍场景,性能最优)

直接用NumPy广播特性计算所有相邻点位中点,再和原点位交错合并即可,全程无Python层级循环,性能远高于迭代实现,完美解决你遇到的顺序错误问题:

import numpy as np
import matplotlib.pyplot as plt

# 原始数据
x = np.array([0,1,2])
y = np.array([5,6,4])

# 批量计算相邻点中点
mid_x = (x[:-1] + x[1:]) / 2
mid_y = (y[:-1] + y[1:]) / 2

# 交错合并原点位和中点,得到顺序正确的结果
new_x = np.column_stack([x[:-1], mid_x]).flatten()
new_x = np.append(new_x, x[-1])
new_y = np.column_stack([y[:-1], mid_y]).flatten()
new_y = np.append(new_y, y[-1])

运行后输出结果和你预期完全一致:
new_x = [0. 0.5 1. 1.5 2. ]
new_y = [5. 5.5 6. 5. 4. ]

方案2:参数化线性插值(适配任意采样倍率,扩展性强)

如果后续需要调整点位密度(比如3倍、4倍重采样),可以用基于路径参数的线性插值方案,只需要修改采样步长即可实现任意密度的重采样:

import numpy as np
from scipy.interpolate import interp1d

x = np.array([0,1,2])
y = np.array([5,6,4])

# 构造路径参数t,对应原始点位的先后顺序
t = np.arange(len(x))
# 生成重采样后的t,步长=1/采样倍率,加倍场景用步长0.5
t_new = np.arange(0, len(x)-1, 0.5)
t_new = np.append(t_new, len(x)-1)

# 分别对x、y相对于t做线性插值
f_x = interp1d(t, x, kind='linear')
f_y = interp1d(t, y, kind='linear')
new_x = f_x(t_new)
new_y = f_y(t_new)

内容的提问来源于stack exchange,提问作者zabop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:39:03