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

如何在Python中为效率数据添加更多采样点并提取采样值

解决方案:效率数据集的插值采样与数值提取

问题背景

你需要基于给定的efficiency数据集,在现有数据点之间添加密集采样点(如索引1与2之间生成1、1.2、1.5、1.7、2这类点),并提取对应数值。原代码存在变量未定义、轴逻辑混淆的问题,导致无法实现需求。

原代码问题修正

  1. 未定义line变量:原代码中xdata = line.get_xdata()会直接报错,因为没有先创建绘图对象line
  2. 轴逻辑错误:原代码将效率值作为x轴,实际应该以数据的索引位置为x轴,效率值为y轴,才能在点之间进行插值采样

实现步骤与完整代码

核心思路

  • 用原始数据的索引作为x轴,效率值作为y轴建立映射
  • 生成密集的采样点(自定义间隔或步长)
  • 通过插值计算采样点对应的效率值
  • 可视化验证并提取数值
import matplotlib.pyplot as plt
import numpy as np
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

# 配置绘图尺寸
plt.rcParams["figure.figsize"] = [15, 3.50]

# 1. 加载原始效率数据集
efficiency_data = np.array([
    0,0,59.02,60,56.54,56.54,62.63,61.94,61.94,62.9,59.02,
    0,0,0,59.02,60,56.54,56.54,62.63,61.94,61.94,62.9,59.02,
    0,0,0,59.02,60,56.54,56.54,62.63,61.94,61.94,62.9,59.02,
    0,0,0,59.02,60,56.54,56.54,62.63,61.94,61.94,62.9,59.02,
    0,0,0,59.02,60,56.54,56.54,62.63,61.94,61.94,62.9,59.02,
    0,0,0,59.02,60,56.54,56.54,62.63,61.94,61.94,62.9,59.02,0
])
# 原始数据的索引轴(每个数据点的位置)
original_x = np.arange(len(efficiency_data))

# 2. 生成密集采样点
# 示例1:全范围按步长0.2生成采样点
dense_x = np.arange(0, len(efficiency_data), 0.2)
# 示例2:仅在索引1-2之间生成指定采样点
# dense_x = np.array([1, 1.2, 1.5, 1.7, 2])

# 3. 线性插值计算采样点对应的效率值
dense_y = np.interp(dense_x, original_x, efficiency_data)

# 4. 可视化对比原始数据与采样结果
plt.figure()
plt.stem(original_x, efficiency_data, label='原始数据', basefmt='b-')
plt.plot(dense_x, dense_y, 'ro', markersize=3, label='插值采样点')
plt.xlim(0, 20)  # 截取部分区间查看细节
plt.legend()
plt.xlabel('数据索引')
plt.ylabel('效率值')
plt.title('原始数据与插值采样效果对比')
plt.show()

# 提取并打印采样点数值(示例:前10个点)
print("采样点索引\t效率值")
for x_val, y_val in zip(dense_x[:10], dense_y[:10]):
    print(f"{x_val:.1f}\t\t{y_val:.2f}")

进阶优化

如果需要更平滑的插值效果(而非线性插值),可以使用scipy的高阶插值方法:

from scipy.interpolate import interp1d

# 创建三次插值函数
interp_func = interp1d(original_x, efficiency_data, kind='cubic')
# 计算采样点数值
dense_y_cubic = interp_func(dense_x)

类DFT曲线的采样适配

若要基于采样后的效率值生成类DFT曲线,只需将插值后的dense_y代入原逻辑:

fs = 100  # 采样率
f = 8     # 信号频率
dft_like_y = np.cos(2 * np.pi * f * (dense_y / fs))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:25:18