相关疑难解决方法(0)

使用Python进行样条插值

我编写了以下代码来执行样条插值:

import numpy as np
import scipy as sp

x1 = [1., 0.88,  0.67,  0.50,  0.35,  0.27, 0.18,  0.11,  0.08,  0.04,  0.04,  0.02]
y1 = [0., 13.99, 27.99, 41.98, 55.98, 69.97, 83.97, 97.97, 111.96, 125.96, 139.95, 153.95]

x = np.array(x1)
y = np.array(y1)

new_length = 25
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)
Run Code Online (Sandbox Code Playgroud)

但我得到了:

ValueError: A value in x_new is below the interpolation range.
Run Code Online (Sandbox Code Playgroud)

interpolate.py

任何帮助,将不胜感激.

python interpolation spline cubic

11
推荐指数
2
解决办法
6万
查看次数

如何在Python中使用高斯kde内核设置带宽来平滑线条

我正在尝试使用 python gaussian_kde 平滑以下数据,但是它无法正常工作,看起来 kde 正在对整个数据集的分布进行重新采样,而不是对每个点使用带宽并给出权重来进行平滑

from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt
import numpy as np
y=[ 191.78 ,   191.59,    191.59,    191.41,    191.47,    191.33,    191.25  \
  ,191.33 ,   191.48 ,   191.48,    191.51,    191.43,    191.42,    191.54    \
  ,191.5975,  191.555,   191.52 ,   191.25 ,   191.15  ,  191.01  ]
x = np.linspace(1 ,20,len(y))
kde= gaussian_kde(y)
kde.set_bandwidth(bw_method=kde.factor / 3)

fig, ax = plt.subplots(figsize=(10, 10))
ax.legend(loc='center left', bbox_to_anchor=(1.05, 0.5), frameon=False)
ax.scatter(x, y, color='black', label='data')
ax.plot(x,y,color='red')
ax.plot(x,kde(x))
Run Code Online (Sandbox Code Playgroud)

这是数据图表

未经平滑处理的数据图表

您可以注意到图表并没有平滑线条

平滑后的图表

python math numpy scipy

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

cubic ×1

interpolation ×1

math ×1

numpy ×1

scipy ×1

spline ×1