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
网格中的总数非常重要。上面的行是我想要做的一个例子,我不知道该怎么做,并希望有人会?!谢谢!
答
这里是一个开始,而不是我敢肯定,这是你想要(保留总计)是什么。事实上,我不确定如果你以这种方式粗化,你会如何确切地保留总数......除非你宁愿“装箱”而不是“插入”?
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
甲'?? interpolate'示出(为我)'统计:: approx'(在基R),'spatstat :: interp.im'和'fBasics :: linearInterp'和'e1071 ::插值'。也许其中一个可以工作? (我会对不需要额外软件包的base-R解决方案感兴趣,但'stats :: approx'看起来有点笨拙,因为它返回一个列表)。 – 2012-02-10 01:23:22
这是非常相似的http://*.com/questions/9171904/r-apply-fun-to-kxk-subsections-of-array – 2012-02-10 02:10:31