R中的2d双线性插值

问题描述:

我有一些多维数据结构,我需要做一些插值。我真的很难找到如何在R中做到这一点的例子!R中的2d双线性插值

举个例子,如果我有数组,old

old <- array(runif(10*12), dim=c(12,10)) 

str(old) 
num [1:12, 1:10] 0.763 0.429 0.792 0.923 0.476 ... 

什么,我想要做的是使数组new

new <- interp2d(old, newx=6, newy=5) 

即我想改变的尺寸数组,以便新数据是old数据的6 * 5数组 - 在此示例中,保留old网格中的总数非常重要。上面的行是我想要做的一个例子,我不知道该怎么做,并希望有人会?!谢谢!

+0

甲'?? interpolate'示出(为我)'统计:: approx'(在基R),'spatstat :: interp.im'和'fBasics :: linearInterp'和'e1071 ::插值'。也许其中一个可以工作? (我会对不需要额外软件包的base-R解决方案感兴趣,但'stats :: approx'看起来有点笨拙,因为它返回一个列表)。 – 2012-02-10 01:23:22

+1

这是非常相似的http://*.com/questions/9171904/r-apply-fun-to-kxk-subsections-of-array – 2012-02-10 02:10:31

这里是一个开始,而不是我敢肯定,这是你想要(保留总计)是什么。事实上,我不确定如果你以这种方式粗化,你会如何确切地保留总数......除非你宁愿“装箱”而不是“插入”?

library(sos) 
findFn("{bilinear interpolation}") 

set.seed(101) 
old <- array(runif(10*12), dim=c(12,10)) 

library(fields) 

interp2d <- function(old, newx, newy) { 
    interp.surface.grid(list(x=seq(nrow(old)),y=seq(ncol(old)),z=old), 
         list(x=seq(1,nrow(old),length=newx), 
          y=seq(1,ncol(old),length=newy)))$z 
} 

newmat <- interp2d(old, newx=6, newy=5) 
+0

感谢本!这似乎正在做我所需要的。它是一种耻辱,它需要基本包以外的东西(即字段),但它起作用,所以我很高兴! – 2012-02-10 11:56:25