【问题标题】:Add more sample points to data向数据中添加更多样本点
【发布时间】:2010-11-01 20:37:24
【问题描述】:

给定一些形状为 20x45 的数据,其中每一行是一个单独的数据集,比如 20 条不同的正弦曲线,每条有 45 个数据点,我将如何获取相同的数据,但形状为 20x100?

换句话说,我有一些形状为 20x45 的数据 A,和一些长度为 20x100 的数据 B,我希望 A 的形状为 20x100,以便更好地比较它们。

这适用于 Python 和 Numpy/Scipy。

我假设它可以用样条线来完成,所以我正在寻找一个简单的例子,可能只是 2x10 到 2x20 或其他东西,其中每一行只是一条线,来演示解决方案。

谢谢!

【问题讨论】:

  • 听起来你想要插值。那么问题是关于插值方法还是关于实现?
  • 让我详细说明我的问题,还有一些东西。

标签: python numpy scipy


【解决方案1】:

在我输入这个例子的时候,Ubuntu 打败了我,但是他的例子只是使用线性插值,这可以用 numpy.interpolate 更容易地完成......(区别只是 scipy.interpolate.interp1d 中的一个关键字参数,但是)。

我想我会包含我的示例,因为它显示了使用 scipy.interpolate.interp1d 和三次样条...

import numpy as np
import scipy as sp
import scipy.interpolate
import matplotlib.pyplot as plt

# Generate some random data
y = (np.random.random(10) - 0.5).cumsum()
x = np.arange(y.size)

# Interpolate the data using a cubic spline to "new_length" samples
new_length = 50
new_x = np.linspace(x.min(), x.max(), new_length)
new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)

# Plot the results
plt.figure()
plt.subplot(2,1,1)
plt.plot(x, y, 'bo-')
plt.title('Using 1D Cubic Spline Interpolation')

plt.subplot(2,1,2)
plt.plot(new_x, new_y, 'ro-')

plt.show()

【讨论】:

  • 这样就行了,谢谢!接受了答案,因为有如此多的细节和漂亮的图片。
【解决方案2】:

一种方法是使用scipy.interpolate.interp1d:

import scipy as sp
import scipy.interpolate
import numpy as np
x=np.linspace(0,2*np.pi,45)
y=np.zeros((2,45))
y[0,:]=sp.sin(x)
y[1,:]=sp.sin(2*x)
f=sp.interpolate.interp1d(x,y)
y2=f(np.linspace(0,2*np.pi,100))

如果您的数据相当密集,则可能没有必要使用高阶插值。

【讨论】:

    【解决方案3】:

    如果您的应用程序对精度不敏感,或者您只想快速了解一下,您可以用相邻已知数据点的平均值填充未知数据点(换句话说,进行简单的线性插值)。

    【讨论】:

    • 那很好。我将如何对每一行数据执行此操作,理想情况下没有循环?
    • 我刚刚查看了 scipy 文档,并且有一些不错的插值工具可用,你应该使用它们。见这里:docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html。看起来您只需要调用interpolate.splrep() 来构造样条表示,然后调用interpolate.splev() 在您需要的点处评估样条。很抱歉,我目前无法访问带有 scipy 的环境,也无法提供代码。无论如何,所有信息都在链接文档的示例部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2014-12-15
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 2017-07-09
    相关资源
    最近更新 更多