R按不可压缩裕度匹配数组



在R.中使用两个数组

array1[x,y]
array2[x,y,t]

我想计算一个array3[x,y],它包含定义array2和array1之间最小差的t索引。这些数组是从netcdf文件中读取的。最好避免循环。如有任何帮助/见解,我们将不胜感激。

循环示例可能类似于:

for i in 1:nx {
  for j in 1:ny {
     for k in 1:nt {
        mindiff[i,j,k] = array1[i,j]-array2[i,j,k]
     }
    #the minimum values over the k dimension
    result[i,j] = sapply(mindiff, 3, min)
  }
}

是否希望结果[i,j]是k的索引值,而不是实际的最小值?

这将为您提供每个的最小差异

library("plyr")
library("matrixStats")
result <- t(laply(1:(dim(array1)[2]), function(j) rowMins(array1[, j, ] - array2[, j])))

如果你想要最小的绝对差值,你需要使用abs

对于每个的索引,你需要再嵌套一个laply并使用which.min:

library("plyr")
result <- laply(1:nrow(array2),
  function(i) laply(1:ncol(array2),
  function(j) which.min(abs(array1[i, j, ] - array2[i, j]))
))

相关内容

  • 没有找到相关文章