【问题标题】:2d bilinear interpolation in RR中的二维双线性插值
【发布时间】:2012-02-10 00:41:45
【问题描述】:

我有一些多维数据结构,需要对其进行插值。我真的很难找到如何在 R 中执行此操作的示例!

例如,如果我有数组,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) 

即我想更改数组的维度,以便 new 是 old 数据的 6*5 数组——在此示例中,保留 old 网格中的总数很重要。上面的行是我想做的一个例子,我不知道怎么做,希望有人会??!谢谢!

【问题讨论】:

  • A ??interpolate 显示(对我而言)stats::approx(以 R 为基数)、spatstat::interp.imfBasics::linearInterpe1071::interpolate。也许其中之一可以工作? (我对不需要额外包的 base-R 解决方案感兴趣,但 stats::approx 看起来有点笨拙,因为它返回一个列表)。

标签: r interpolation


【解决方案1】:

这是一个开始,但我不确定它是否符合您的要求(保留总数)。事实上,我不确定当你以这种方式粗化时如何准确地保留总数......除非你宁愿“bin”而不是“interpolate”?

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)

【讨论】:

  • 谢谢本!这似乎可以满足我的需要。可惜它需要基本包以外的东西(即字段),但它可以工作,所以我很高兴!
猜你喜欢
  • 2016-06-22
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多