在R语言中查找矩阵每行最小值所在列(大矩阵场景)
如何在R中查找矩阵每行最小值所在的列号?
嘿,这个需求在矩阵处理里挺常见的,我给你两种base R里就能实现的方法,尤其是针对大矩阵的场景,第二种方法效率会更高哦!
首先先模拟你提到的示例场景(我直接构造了矩阵,确保能得到你期望的(3,4,1)结果):
# 构造符合你期望结果的示例矩阵 mat <- matrix(c(5,6,1, 2,7,8, 1,9,10, 4,3,11), nrow=3, byrow=TRUE) print(mat) # [,1] [,2] [,3] [,4] # [1,] 5 2 1 4 # [2,] 6 7 9 3 # [3,] 1 8 10 11
方法1:用apply() + which.min()
这是最直观的方法,apply()可以按行(MARGIN=1)处理矩阵,which.min()会返回当前行中最小值的位置(也就是列号):
row_min_cols <- apply(mat, 1, which.min) print(row_min_cols) # [1] 3 4 1
注意点:
如果某一行存在多个相同的最小值,which.min()只会返回第一个出现的最小值的列号,这是默认行为哦。
方法2:用max.col()(大矩阵首选)
如果你处理的是大尺寸矩阵,推荐用这个方法,因为max.col()是R内部优化的向量化函数,比apply()的逐行循环效率高很多。原理很简单:我们把矩阵取负数,原来的最小值就变成了最大值,再用max.col()找最大值的列号,就等价于找原矩阵最小值的列号:
row_min_cols <- max.col(-mat) print(row_min_cols) # [1] 3 4 1
两种方法都能得到你想要的结果,大矩阵情况下优先选第二种,速度会快不少~
内容的提问来源于stack exchange,提问作者John legend2
相关产品推荐
相关产品推荐

