如何识别数组中最大值的位置?

时间:2013-07-29 22:20:08

标签: arrays r max

我的数组是

x <- array(1:24, dim=c(3,4,3))

我的任务1是根据前两个维度找到最大值

x.max <- apply(x,c(1,2), function(x) ifelse(all(is.na(x)), NA, max(x, na.rm = TRUE)))    

如果有NA数据     我的任务2是找到第三维上的最大值位置。 我试过了

x.max.position = apply(x, c(1,2),which.max(x))

但这只能给我第二个方面的立场。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

目前还不完全清楚,但是如果你想为第三维的每个矩阵找到max(即使是技术上正确的说法吗?),那么你需要使用apply横跨第三维度。 margin下的参数?apply表示:

  

给出将应用函数的下标的向量。例如,对于矩阵1表示行,2表示列,c(1,2)表示行和列。

因此,对于这个拥有3D数组的示例,3是第三维。所以...

t( apply( x , 3 , function(x) which( x == max(x) , arr.ind = TRUE ) ) ) 
     [,1] [,2]
[1,]    3    4
[2,]    3    4
[3,]    3    4

返回一个矩阵,其中每行包含行,然后是第三维的每个2D数组/矩阵的最大值的列索引。

如果您想要所有维度的max,可以使用whicharr.ind参数,如下所示:

which( x==max(x,na.rm=T) , arr.ind = T )
     dim1 dim2 dim3
[1,]    3    4    2

它告诉我们max值是第三行,第四列,第二个矩阵。

修改

要找到dim 3处的位置,其中dim 1和2上的值是max try:

which.max( apply( x , 3 , max ) )
# [1] 2

它告诉我们在第三维的第2位包含最大值。