如果我运行以下代码:
>>> from scipy.interpolate import interpolate
>>> import numpy as np
>>> data = np.arange(10)
>>> times = np.r_[np.arange(5),np.arange(5)]
>>> new_times = np.arange(5)
>>> f = interpolate.interp1d(times,data)
>>> interp_data = f(new_times)
我很天真地希望:
^{pr2}$基于同位值的平均值和插值中相应加权的假设。但事实上,结果是:
>>> interp_data
array([ 0., 6., 7., 8., 9.])
是什么导致了这种行为,如何纠正?在
不,
interp1d
不会为您加权、平均或对数据做任何其他操作。在它希望对数据进行排序。如果你的scipy是最新的(0.14或更高版本),它有
assume_sorted
关键字,你可以将其设置为False,然后它会为你排序。未排序数据的精确行为未定义。在来自
interp1d
文档:我只能通过明确地强制
assume_sorted
为True
得到你得到的结果:从代码中可以看出,
assume_sorted
默认为True
,这给出了您意想不到的答案。在如果显式地将其设置为
^{pr2}$False
,根据文档,interp1d
会自动对其排序,然后进行插值,得到与文件相符。在
我不确定你到底想要什么,但看来interp可能不是实现这一目标的最佳方式。插值函数f应将单个输入与单个输出相关联,即
或者,可以这样回答: Get sums of pairs of elements in a numpy array 可能是你想要的?在
相关问题 更多 >
编程相关推荐