如何在R中查找列表内数组最大值对应的i、j、k维度索引
你调用which.max得到的单个数值是数组扁平化后的线性索引,可以通过以下两种方法快速得到你需要的三维坐标:
方法1:高效取第一个最大值的坐标(推荐大数据量使用)
which.max只会遍历一次数组返回第一个最大值的线性索引,再用arrayInd直接转换为多维坐标,性能更高:
# 取最大值的线性索引 max_linear_idx <- which.max(All$Data) # 转换为三维坐标 max_pos <- arrayInd(max_linear_idx, .dim = dim(All$Data), useNames = FALSE) # 转为向量输出,格式正好是 [切片序号, 行号, 列号] print(as.vector(max_pos))
针对你给出的示例数据,输出结果为 [1] 12 256 208,也就是第12个切片的256行208列的位置。
方法2:直接获取所有最大值的坐标
如果数组中存在多个相同的最大值,需要返回所有位置,可以用which搭配arr.ind = TRUE实现:
# 返回所有最大值的三维坐标,每一行对应一个位置 all_max_pos <- which(All$Data == max(All$Data), arr.ind = TRUE, useNames = FALSE) print(all_max_pos)
注意:R数组的维度顺序和你定义时的顺序完全一致,你的
All$Data定义时维度为c(12,256,512),所以返回的坐标顺序默认就是「切片序号-行号-列号」,符合你需要的输出格式。
内容的提问来源于stack exchange,提问作者matlabcat
相关产品推荐
相关产品推荐

