我正在尝试使用Matlab(https://uk.mathworks.com/help/matlab/ref/spline.html)的相同方法在Julia中插入两点。我已经尝试了Interpolations(https://github.com/tlycken/Interpolations.jl)库,但是在创建工作脚本时遇到了几个问题。

我有一个DataArrays.DataArray {Float64,1},它有两个点(比如说1.5和10.5),它们之间有5个不适用:

using DataFrames
using Interpolations

a = @data([1.5, NA, NA, NA, NA, NA, 10.5]);

在Matlab中,运行样条函数就足够了。在Julia中,插值功能允许三次插值。但是,它似乎不适用于NA。我该怎么做?另外,他们是否使用相同/类似的算法对这些点进行插值?

最佳答案

如果您假设它们是均匀间隔的,则假设您可以使用linspace进行线性插值。您只需要开始,结束以及之间的值数:

linspace(a[1],a[end],sum(isna(a)))

更一般而言,要在任何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

您可以根据需要进行清理或将其放入函数中。尽管假设每个已知值之间都被线性地隔开是一个奇怪的假设。

08-19 20:03