我试图在Julia中插入两个点,使用相同的Matlab方法(https://uk.mathworks.com/help/matlab/ref/spline.html)。我尝试过Interpolations(https://github.com/tlycken/Interpolations.jl)库,但是我在创建工作脚本时遇到了一些问题。
我有一个DataArrays.DataArray {Float64,1}有两个点(比方说是1.5和10.5)和它们之间有5个NA:
using DataFrames
using Interpolations
a = @data([1.5, NA, NA, NA, NA, NA, 10.5]);
在Matlab中运行 spline 函数就足够了。在Julia中, interpolate 函数允许三次插值。但是,似乎没有与NA合作。我该怎么做?另外,他们是否使用相同/类似的算法来插入这些点?
答案 0 :(得分:1)
如果你假设它们是均匀间隔的,那么你假设一个线性插值,你可以使用linspace。您只需要开头,结尾和中间值的数量:
linspace(a[1],a[end],sum(isna(a)))
更一般地说,要在任何NA之间进行插值,您可以使用
找到非NA值idxs = find(~isna(a))
然后再做
for i in 1:length(idxs)-1
tmpidxs = idxs[i]:idxs[i+1]
a[idxs[i]+1:idxs[i+1]-1] = linspace(a[idxs[i]],a[idxs[i+1]],length(tmpidxs))[2:end-1]
end
如果需要,您可以清理它或将其放入功能中。虽然假设在每个已知值之间它应该是线性间隔的,但这是一个奇怪的假设。