numpy interp 减少 xp
numpy interp decreasing xp
我想插入一个 numpy 数组,np.interp 几乎完全符合我的要求:
interp(x, xp, fp, left=None, right=None)
One-dimensional linear interpolation.
除了这个位:
Does not check that the x-coordinate sequence xp
is increasing.
If xp
is not increasing, the results are nonsense.
我的 xp 正在减少,所以哪个更好:
反转 xp 和 fp 的方向:
np.interp(x, xp[::-1], fp[::-1])
或反转 x 和 xp:
np.interp(-x, -xp, fp)
或者有更好的方法吗?
如果您有权访问 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()
感谢所有提供意见的人,尤其是@Jaime。
我试验了一下,得出了这个结论:
1) 除了舍入误差,我提到的两种方法结果都是一样的
2) 它们花费的时间几乎相同
3) 我尝试了 scipy 版本,但它会拒绝 assume_sorted 标志。也许我的 scipy 版本已经过时了。我怀疑如果升起该标志,scipy 会在内部对数组进行排序。但是值是排序的,只是方向相反,所以不需要这样做。
反正我用反方向的方法:
np.interp(x, xp[::-1], fp[::-1])
请记住,在这种情况下,如果需要,您还必须反转 left
和 right
。
我想插入一个 numpy 数组,np.interp 几乎完全符合我的要求:
interp(x, xp, fp, left=None, right=None)
One-dimensional linear interpolation.
除了这个位:
Does not check that the x-coordinate sequence
xp
is increasing. Ifxp
is not increasing, the results are nonsense.
我的 xp 正在减少,所以哪个更好: 反转 xp 和 fp 的方向:
np.interp(x, xp[::-1], fp[::-1])
或反转 x 和 xp:
np.interp(-x, -xp, fp)
或者有更好的方法吗?
如果您有权访问 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()
感谢所有提供意见的人,尤其是@Jaime。
我试验了一下,得出了这个结论:
1) 除了舍入误差,我提到的两种方法结果都是一样的
2) 它们花费的时间几乎相同
3) 我尝试了 scipy 版本,但它会拒绝 assume_sorted 标志。也许我的 scipy 版本已经过时了。我怀疑如果升起该标志,scipy 会在内部对数组进行排序。但是值是排序的,只是方向相反,所以不需要这样做。
反正我用反方向的方法:
np.interp(x, xp[::-1], fp[::-1])
请记住,在这种情况下,如果需要,您还必须反转 left
和 right
。