当前位置: 首页 > news >正文

使用阿里云建网站微信营销软件app

使用阿里云建网站,微信营销软件app,义乌外贸建站,江苏廉政建设网站Python开发之手动实现一维线性插值 1.线性插值法介绍2.手动实现线性插值3.案例一#xff1a;手动实现线性插值4.使用pandas的插值方法实现要求(推荐)5.案例二#xff1a;对一组数据进行线性插值和SG滤波处理 前言#xff1a;主要介绍手动实现一维线性插值以及pandas里面的in… Python开发之手动实现一维线性插值 1.线性插值法介绍2.手动实现线性插值3.案例一手动实现线性插值4.使用pandas的插值方法实现要求(推荐)5.案例二对一组数据进行线性插值和SG滤波处理 前言主要介绍手动实现一维线性插值以及pandas里面的interpolate方法实现线性插值。并结合案例实现一组数据的线性插值和SG滤波处理。 1.线性插值法介绍 线性插值法是一种简单的插值方法用于在两个已知数据点之间估算未知位置上的数据值。它基于线性关系的假设即在两个已知数据点之间的数据值随着位置的变化而呈线性变化。假设有两个已知数据点 (x1, y1) 和 (x2, y2)其中 x1 和 x2 是两个数据点的位置y1 和 y2 是对应的数据值。现在需要在这两个数据点之间的某个位置 x0 处估算数据值 y0。线性插值法的计算公式如下 y0 y1 (x0 - x1) * (y2 - y1) / (x2 - x1) 其中y0 是在位置 x0 处估算的数据值y1 和 y2 是已知数据点的数据值x1 和 x2 是已知数据点的位置x0 是要估算的位置。 线性插值法的原理是利用已知数据点之间的线性关系根据位置的比例关系来估算未知位置上的数据值。它假设数据值在两个已知数据点之间是线性变化的因此在两个数据点之间的位置上估算值与实际值的误差较小。线性插值法在实际应用中常用于处理缺失数据或填补异常值以及在图形绘制和数据处理中用于平滑数据。然而需要注意的是线性插值法在数据变化非线性或存在较大波动时可能不适用此时需要考虑其他更复杂的插值方法。 2.手动实现线性插值 核心代码 def linear_interpolation(x1, y1, x2, y2, x0):线性插值函数参数x1, y1: 第一个已知数据点的位置和数据值x2, y2: 第二个已知数据点的位置和数据值x0: 要估算的位置返回值y0: 在位置 x0 处估算的数据值y0 y1 (x0 - x1) * (y2 - y1) / (x2 - x1)return y0# 示例数据 x1, y1 0, 10 x2, y2 5, 20 x0 2# 使用线性插值估算在位置 x0 处的数据值 y0 linear_interpolation(x1, y1, x2, y2, x0) print(f在位置 {x0} 处的估算数据值为{y0}) 3.案例一手动实现线性插值 数据格式 分析1.首先判断该数据是否需要插值 2.获取nan的索引位置保存到list集合中去 3.根据获取的nan的索引位置得到位置前后的数据通过线性插值法算出该nan的值。 代码具体实现 import numpy as np import pandas as pddef is_exist_nan(data):for d in data:if np.isnan(d):return Truereturn Falsedef get_nan_index_list(data):index_list []for index,d in enumerate(data):if np.isnan(d):index_list.append(index)return index_listdef linear_interpolation(x1, y1, x2, y2, x0):线性插值函数参数x1, y1: 第一个已知数据点的位置和数据值x2, y2: 第二个已知数据点的位置和数据值x0: 要估算的位置返回值y0: 在位置 x0 处估算的数据值y0 y1 (x0 - x1) * (y2 - y1) / (x2 - x1)return y0def get_first_data(data):for index,d in enumerate(data):if not np.isnan(d):return ddef get_last_data(data):count len(data) -1for d in data:if not np.isnan(data[count]):return data[count]else:countcount-1def digu(x2,data):if not np.isnan(data[x2]):return x2,dataelse:x2 x2 1return digu(x2,data)def get_new_data(nan_index_list, data):if nan_index_list[0] 0:data[0] get_first_data(data)nan_index_list.remove(0)if len(nan_index_list)1:if nan_index_list[len(nan_index_list)-1] 26:data[26] get_last_data(data)nan_index_list.remove(26)if len(nan_index_list) 1:for nan_index in nan_index_list:x1 nan_index - 1y1 data[x1]x2 nan_index 1x2,data digu(x2,data)y2 data[x2]x0 nan_indexy0 round(linear_interpolation(x1, y1, x2, y2, x0), 4)data[nan_index] y0return dataif __name__ __main__:data1 [np.nan, -0.3356, -0.3208, -0.3661, 0.2192, np.nan, np.nan, np.nan, -0.3709, -0.3779, 0.026, -0.2601,np.nan, -0.0238, -0.2241, -0.2105, -0.2623, 0.379, -0.2196, np.nan, -0.0835, 0.2895, 0.0415, -0.2323,-0.1782, -0.2308, -0.2265]if is_exist_nan(data1):print(data1)nan_index_list get_nan_index_list(data1)new_data get_new_data(nan_index_list,data1)print(new_data)运行结果如下 [nan, -0.3356, -0.3208, -0.3661, 0.2192, nan, nan, nan, -0.3709, -0.3779, 0.026, -0.2601, nan, -0.0238, -0.2241, -0.2105, -0.2623, 0.379, -0.2196, nan, -0.0835, 0.2895, 0.0415, -0.2323, -0.1782, -0.2308, -0.2265] [-0.3356, -0.3356, -0.3208, -0.3661, 0.2192, 0.0717, -0.0758, -0.2234, -0.3709, -0.3779, 0.026, -0.2601, -0.1419, -0.0238, -0.2241, -0.2105, -0.2623, 0.379, -0.2196, -0.1515, -0.0835, 0.2895, 0.0415, -0.2323, -0.1782, -0.2308, -0.2265] 给大家提供一个思路具体用的时候推荐用pandas的interpolate方法实现。 4.使用pandas的插值方法实现要求(推荐) import pandas as pdif __name__ __main__:# 原始数据包含缺失值data [np.nan, -0.3356, -0.3208, -0.3661, 0.2192, np.nan, np.nan, np.nan, -0.3709, -0.3779, 0.026, -0.2601,np.nan, -0.0238, -0.2241, -0.2105, -0.2623, 0.379, -0.2196, np.nan, -0.0835, 0.2895, 0.0415, -0.2323,-0.1782, -0.2308, -0.2265]# 将数据转换为pandas的Series对象此时缺失值会自动转换为NaNdata_series pd.Series(data)# 执行线性插值并处理第一个和最后一个NaNinterpolated_data data_series.interpolate(limit_directionboth)# 打印插值结果print(interpolated_data.values) 5.案例二对一组数据进行线性插值和SG滤波处理 import numpy as np import pandas as pd from scipy.signal import savgol_filter import matplotlib.pyplot as pltdef get_interpolated_data(data):# 将数据转换为pandas的Series对象此时缺失值会自动转换为NaNdata_series pd.Series(data)# 执行线性插值并处理第一个和最后一个NaNinterpolated_data data_series.interpolate(limit_directionboth).tolist()interpolated_data [round(i, 4) for i in interpolated_data] # 保留四位小数return interpolated_datadef get_sg_data(data, window_size, polyorder):smoothed_data savgol_filter(data, window_size, polyorder).tolist()smoothed_data [round(i, 4) for i in smoothed_data] # 保留四位小数return smoothed_dataif __name__ __main__:# 原始数据包含缺失值data [np.nan, -0.3356, -0.3208, -0.3661, 0.2192, np.nan, np.nan, np.nan, -0.3709, -0.3779, 0.026, -0.2601,np.nan, -0.0238, -0.2241, -0.2105, -0.2623, 0.379, -0.2196, np.nan, -0.0835, 0.2895, 0.0415, -0.2323,-0.1782, -0.2308, -0.2265]interpolated_data get_interpolated_data(data)sg_data get_sg_data(interpolated_data,5,2)sg_data2 get_sg_data(interpolated_data,9,3)print(interpolated_data)print(sg_data)print(sg_data2)plt.plot(interpolated_data, labelinterpolated_data)plt.plot(sg_data, labelsg_data window_size5 polyorder2)plt.plot(sg_data2, labelsg_data2 window_size9 polyorder3)plt.xlabel(Time)plt.ylabel(Value)plt.title(Line Plot)plt.legend()plt.show()
http://wiki.neutronadmin.com/news/39775/

相关文章:

  • 网站模板免费下载php有什么免费的wordpress
  • 优才网站建设简单网页制作html
  • 建设企业高端网站专业商城网站设计
  • 东莞非凡网站建设网站制作的相关术语
  • 做公司+网站建设价格网站 使用的字体
  • 邯郸网站设计哪家好建设银行网站理财产品为何不让买
  • 接帮人家做网站的网站濮阳网站建设电话
  • 深圳网站设计 三把火科技注册安全工程师有什么用
  • 网站上传文件夹软件定制图片
  • 网站系统繁忙是什么意思临沂网站建设培训
  • 网站页脚设计一个学校怎么制作网站
  • 西安公司网站制作价格网站建设全程揭秘 课件下载
  • 墙膜 东莞网站建设客户网站留言
  • 手机 网站 模板哈尔滨做公司网站的公司有哪些
  • 互动型网站做网站销售一个星期的计划
  • 网站建设相关制度南京前十名传媒广告公司
  • 商城网站建设多少钱网站文章更新频率
  • 自建站推广方式php伪静态网站破解
  • 唐山哪个公司做网站wordpress 5.0.1编辑器
  • 淄博桓台网站建设报价府网站建设运维情况自查报告
  • 电商网站建设源码巩义网络建设网站
  • 公司网站备案条件专业制作网站服务
  • 合网站建设网站收录怎么弄
  • 清远专业网站制作公司唐山做网站优化公司
  • 做网站图片格式北京网页设计师工资有多少
  • 服装设计网站大全免费推广平台有哪些 请一一例举
  • 北京个人网站设计app软件免费下载安装最新版
  • 网站建设 百度云长春中企动力怎么样
  • 网络型网站分为合肥免费做网站
  • 行业网站设计公司网站域名变更怎么查询