numpy interp减少xp

时间:2015-03-02 03:03:38

标签: python numpy interpolation

我想插入一个numpy数组,而np.interp几乎完全符合我的要求:

interp(x, xp, fp, left=None, right=None)
One-dimensional linear interpolation.

除了这一点:

  

不检查x坐标序列xp是否正在增加。   如果xp没有增加,则结果是无意义的。

我的xp正在下降,所以哪个更好: 颠倒xp和fp的方向:

np.interp(x, xp[::-1], fp[::-1])

或反转x和xp:

np.interp(-x, -xp, fp)

还是有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

感谢所有提供意见的人,特别是@Jaime。

我做了一些实验,得出了这个结论:

1)除了舍入误差外,我提到的两种方法都有相同的结果。

2)他们都花了相同的时间

3)我尝试了scipy版本,但它会拒绝assume_sorted标志。也许我的scipy版本已经过时了。我怀疑如果该标志被引发,scipy会在内部对数组进行排序。但是这些值是按相反的方向排序的,所以它不需要这样做。

无论如何,我会使用反向方法:

np.interp(x, xp[::-1], fp[::-1])

请记住,在这种情况下,如果您需要,还必须撤销leftright

答案 1 :(得分:3)

如果您有权访问Scipy,则可以使用interp1d函数,该函数具有关键字assume_sorted=False来处理递减数组。

编辑:此解决方案处理有序和非有序x值的情况。

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

# Decreasing array
x = np.arange(0, 10)[::-1]
y = np.exp(-x/3.0)

# Interpolation object
f = interpolate.interp1d(x, y, assume_sorted = False)

xnew = np.arange(3,5)
ynew = f(xnew)   # use interpolation function returned by `interp1d`
plt.plot(x, y, 'o', xnew, ynew, '-')
plt.show()