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

按不可压缩裕度R匹配数组,r,multidimensional-array,margins,R,Multidimensional Array,Margins,在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] } #

在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])))

请提供
…我想计算一个包含t索引的数组3[x,y]。
听起来有点让我困惑。你要的是array3[2个参数],以及关于mindiff[3个参数]和result[2个参数]的continue。哪一个是哪一个?谢谢尼克的帮助。@Matt后一个解决了你的问题吗?如果阵列较大,则值得考虑使用外部
laply
.parallel
选项,特别是如果您所在的计算机支持
registerDoMC
(即非Windows)。@nick再次感谢,我找到了一个部分解决方案。一个后续问题是:对于结果[i,j]中表示t值的索引,我如何使用数组1[i,j,t]中的索引并折叠t维度?@Matt
fin
library("plyr")
result <- laply(1:nrow(array2),
  function(i) laply(1:ncol(array2),
  function(j) which.min(abs(array1[i, j, ] - array2[i, j]))
))