python线性插值

本文介绍了如何使用Python的NumPy库对一维数组中的缺失数据进行线性插值处理,并通过matplotlib库展示了插值前后数据的变化。通过示例代码,读者可以了解如何利用已知数据点的索引和值来填充数组中的空缺部分,并观察插值后的图形效果。
摘要由CSDN通过智能技术生成

假设有一个一维数组,但是此数组中只有部分位置上有值,其它位置数据缺失,现在想用线性插值的方法将其填充。

示例代码:

import numpy as np

# 假设你有一个长度为171的数组,名为full_data,其中有13个数据点
# 用 None 表示缺失的数据点
full_data = [None] * 171

# 假设你已经有了13个数据点的索引和值
known_indices = [11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 141, 161]
known_values = [0.207, 0.217, 0.184, 0.177, 0.162, 0.312,
                0.253, 0.317, 0.333, 0.336, 0.352, 0.288, 0.295]

# 使用 NumPy 的interp函数进行线性插值
# 注意:interp函数要求已知数据点的索引必须是单调递增的
# 这里假设已知索引是单调递增的
full_indices = np.arange(len(full_data))
full_data = np.interp(full_indices, known_indices, known_values)

# 打印结果
print(full_data)

结果展示:

[0.207   0.207   0.207   0.207   0.207   0.207   0.207   0.207   0.207
 0.207   0.207   0.207   0.208   0.209   0.21    0.211   0.212   0.213
 0.214   0.215   0.216   0.217   0.2137  0.2104  0.2071  0.2038  0.2005
 0.1972  0.1939  0.1906  0.1873  0.184   0.1833  0.1826  0.1819  0.1812
 0.1805  0.1798  0.1791  0.1784  0.1777  0.177   0.1755  0.174   0.1725
 0.171   0.1695  0.168   0.1665  0.165   0.1635  0.162   0.177   0.192
 0.207   0.222   0.237   0.252   0.267   0.282   0.297   0.312   0.3061
 0.3002  0.2943  0.2884  0.2825  0.2766  0.2707  0.2648  0.2589  0.253
 0.2594  0.2658  0.2722  0.2786  0.285   0.2914  0.2978  0.3042  0.3106
 0.317   0.3186  0.3202  0.3218  0.3234  0.325   0.3266  0.3282  0.3298
 0.3314  0.333   0.3333  0.3336  0.3339  0.3342  0.3345  0.3348  0.3351
 0.3354  0.3357  0.336   0.3368  0.3376  0.3384  0.3392  0.34    0.3408
 0.3416  0.3424  0.3432  0.344   0.3448  0.3456  0.3464  0.3472  0.348
 0.3488  0.3496  0.3504  0.3512  0.352   0.3488  0.3456  0.3424  0.3392
 0.336   0.3328  0.3296  0.3264  0.3232  0.32    0.3168  0.3136  0.3104
 0.3072  0.304   0.3008  0.2976  0.2944  0.2912  0.288   0.28835 0.2887
 0.28905 0.2894  0.28975 0.2901  0.29045 0.2908  0.29115 0.2915  0.29185
 0.2922  0.29255 0.2929  0.29325 0.2936  0.29395 0.2943  0.29465 0.295
 0.295   0.295   0.295   0.295   0.295   0.295   0.295   0.295   0.295  ]

线性插值绘图代码:

import matplotlib.pyplot as plt
import numpy as np

# 数据
x = [11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 141, 161]
y = [0.207, 0.217, 0.184, 0.177, 0.162, 0.312,
     0.253, 0.317, 0.333, 0.336, 0.352, 0.288, 0.295]
x1 = np.arange(0, 171)
y1 = [0.207, 0.207, 0.207, 0.207, 0.207, 0.207, 0.207, 0.207, 0.207,
      0.207, 0.207, 0.207, 0.208, 0.209, 0.21, 0.211, 0.212, 0.213,
      0.214, 0.215, 0.216, 0.217, 0.2137, 0.2104, 0.2071, 0.2038, 0.2005,
      0.1972, 0.1939, 0.1906, 0.1873, 0.184, 0.1833, 0.1826, 0.1819, 0.1812,
      0.1805, 0.1798, 0.1791, 0.1784, 0.1777, 0.177, 0.1755, 0.174, 0.1725,
      0.171, 0.1695, 0.168, 0.1665, 0.165, 0.1635, 0.162, 0.177, 0.192,
      0.207, 0.222, 0.237, 0.252, 0.267, 0.282, 0.297, 0.312, 0.3061,
      0.3002, 0.2943, 0.2884, 0.2825, 0.2766, 0.2707, 0.2648, 0.2589, 0.253,
      0.2594, 0.2658, 0.2722, 0.2786, 0.285, 0.2914, 0.2978, 0.3042, 0.3106,
      0.317, 0.3186, 0.3202, 0.3218, 0.3234, 0.325, 0.3266, 0.3282, 0.3298,
      0.3314, 0.333, 0.3333, 0.3336, 0.3339, 0.3342, 0.3345, 0.3348, 0.3351,
      0.3354, 0.3357, 0.336, 0.3368, 0.3376, 0.3384, 0.3392, 0.34, 0.3408,
      0.3416, 0.3424, 0.3432, 0.344, 0.3448, 0.3456, 0.3464, 0.3472, 0.348,
      0.3488, 0.3496, 0.3504, 0.3512, 0.352, 0.3488, 0.3456, 0.3424, 0.3392,
      0.336, 0.3328, 0.3296, 0.3264, 0.3232, 0.32, 0.3168, 0.3136, 0.3104,
      0.3072, 0.304, 0.3008, 0.2976, 0.2944, 0.2912, 0.288, 0.28835, 0.2887,
      0.28905, 0.2894, 0.28975, 0.2901, 0.29045, 0.2908, 0.29115, 0.2915, 0.29185,
      0.2922, 0.29255, 0.2929, 0.29325, 0.2936, 0.29395, 0.2943, 0.29465, 0.295,
      0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295]

# 绘制折线图
plt.scatter(x, y, color='red', label='pre-interpolation')
plt.plot(x, y, color='pink')
# dashes设置虚线与虚线之间的间隔
plt.plot(x1, y1, alpha=1, linestyle='--',
         color='blue', dashes=(10, 10), label='post-interpolation')

# 添加标题和标签
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

plt.legend()

# 显示图形
plt.show()

结果展示:
在这里插入图片描述
从图片可以看出,线性插值即是将两点连成直线,插值的数据即是直线上的数据。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭博锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值