【问题标题】:find second maximum position in matrix (like max.col)在矩阵中找到第二个最大位置(如 max.col)
【发布时间】:2018-02-05 13:55:00
【问题描述】:

我试图找出一种方法来找到矩阵每一行的第二个最大位置,就像 max.col 函数一样,但是对于第二个最大值。 有任何想法吗? 谢谢!

【问题讨论】:

  • 一种选择是获取最大元素并将其替换为最小值。然后做 max.col,但用apply 更容易做,即apply(m1, 1, function(x) sort(x, decreasing = TRUE)[2])
  • @akrun,使用apply 确实更容易,但是如果你有它们(并且希望它们以某种方式处理),你不需要更多的代码来处理它们。还需要which(x==sort(x,decreasing=TRUE)[2]) 或类似的东西来获取列位置吗?
  • @MikeH。如果您使用max.col,则存在 NA 时存在潜在风险。关于关系,尚不清楚 OP 是否在数据集中有它。如果有联系,是的,需要解决。但是,max.col 也失败了,因为它只有第一个、最后一个或随机的选项
  • @akrun,你是对的。我想这取决于 OP 的预期用途
  • 谢谢大家!我正在尝试基于神经网络的分类器,我需要找到第二个最可能的预测类。我想知道,我还可以保存最高和第二高列的值吗?因为这些是每个类的后验概率,以后可能也会有用

标签: r search matrix max


【解决方案1】:

您可以尝试将最大值替换为-Inf,然后再次使用max.col

set.seed(1)
mat <- matrix(sample(1:15), nrow = 5)
#mat
#     [,1] [,2] [,3]
#[1,]    4    9    2
#[2,]    6   10   13
#[3,]    8   14   12
#[4,]   11    5   15
#[5,]    3    1    7


max.col(replace(mat, cbind(1:5, max.col(mat)), -Inf))
#[1] 1 2 3 1 1

使用第二个max.col 很方便,因为如果您有联系,您仍然可以使用max.col 来适当地处理它们。

【讨论】:

  • 这样就可以了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多