Julia中的Matlab样条函数

时间:2016-09-22 15:08:41

标签: matlab interpolation julia

我试图在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合作。我该怎么做?另外,他们是否使用相同/类似的算法来插入这些点?

1 个答案:

答案 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

如果需要,您可以清理它或将其放入功能中。虽然假设在每个已知值之间它应该是线性间隔的,但这是一个奇怪的假设。