arrays - 如何确定数组中最大值的位置?

标签 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))

但这只能给我在第一个二维上的位置。

有人可以帮助我吗?

最佳答案

这还不完全清楚,但如果你想找到max对于第三维的每个矩阵(这在技术上是正确的说法吗?),那么您需要使用 apply跨越三维空间。论据margin?apply指出:

a vector giving the subscripts which the function will be applied over. E.g., for a matrix 1 indicates rows, 2 indicates columns, c(1, 2) indicates rows and columns.

因此,对于这个有 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

它返回一个矩阵,其中每行包含第三维的每个二维数组/矩阵的最大值的行索引和列索引。

如果你想要max跨越您可以使用的所有维度whicharr.ind这样的论证:

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

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

编辑

要找到暗淡 3 处的位置,其中暗淡 1 和 2 上的值最大,请尝试:

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

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

关于arrays - 如何确定数组中最大值的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17935199/

相关文章:

c - 如何在 ANSI C 中对字符串结构数组使用快速排序

c++ - 如何将二维数组作为参数传递?

mysql - 有没有办法使用 RMySQL 调用存储过程?

java - 通过数组传递不确定数量的 Int

Java从外部静态类创建类内的类数组

r - 如何协调 .data 代词与 rlang::enquo

r - 根据一列中的字符串组合行

Mysql - 无法从别名值获取具有最大值的正确行

小场的C/min和max

c - 从数据文件中查找最小值和最大值