【问题标题】:using interp1 in R for matrix在 R 中使用 interp1 作为矩阵
【发布时间】:2013-04-09 18:27:37
【问题描述】:

我正在尝试使用 R 中的 interp1 函数对矩阵进行线性插值,而不使用 for 循环。到目前为止,我已经尝试过:

bthD <- c(0,2,3,4,5) # original depth vector
bthA <- c(4000,3500,3200,3000,2800) # original array of area

Temp <- c(4.5,4.2,4.2,4,5,5,4.5,4.2,4.2,4)
Temp <- matrix(Temp,2) # matrix for temperature measurements

# -- interpolating bathymetry data  --
depthTemp <- c(0.5,1,2,3,4)
layerZ <- seq(depthTemp[1],depthTemp[5],0.1)

library(signal)
layerA <- interp1(bthD,bthA,layerZ);

# -- interpolate= matrix --
layerT <- list()
for (i in 1:2){
  t <- Temp[i,]
  layerT[[i]] <- interp1(depthTemp,t,layerZ)  
}
layerT <- do.call(rbind,layerT)

所以,在这里我在 for 循环中对矩阵的每一行都使用了 interp1。我想知道如何在不使用 for 循环的情况下做到这一点。我可以在matlab中通过如下转置矩阵来做到这一点:

layerT = interp1(depthTemp,Temp',layerZ)'; % matlab code

但是当我尝试在 R 中这样做时

layerT <- interp1(depthTemp,t(Temp),layerZ)

它不返回插值结果的矩阵,而是一个数值数组。如何确保 R 返回插值矩阵?

【问题讨论】:

    标签: r interpolation


    【解决方案1】:
    • 你的方法没有错;我可能会避免中间的t &lt;-

    • 如果你想感受 R-ish,试试

    apply(Temp,1,function(t) interp1(depthTemp,t,layerZ))

    如果你真的需要,你可能需要在 all 前面添加一个 t(ranspose)。

    由于这是一个 3d 字段,每行插值可能不是最佳的。我最喜欢的是包装tgp 中的interp.loess,但对于常规间距,其他选项可能可用。该方法不适用于您的迷你示例(这对问题很好),但需要更大的网格。

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 2022-11-02
      • 2016-08-30
      • 2021-09-16
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      相关资源
      最近更新 更多