【问题标题】:Find minimum with conditions找到有条件的最小值
【发布时间】:2016-08-01 15:59:46
【问题描述】:

我有一个包含 2 列和多行的矩阵。我想在第一列中找到最小值的索引,但仅限于第 2 列小于 5 的值。

这是一个例子:

x = [3,2;2,4;1,6];

我希望结果是索引 2,因为 2 是第 1 列的最小值,条件是第 2 列小于 5。

在matlab中有没有更快的方法来做到这一点。我目前的解决方案是:

indicesCandidates = x(:,2) < 5;
minValue = min(x(indicesCandidates,1));
indicesMin = find(x(:,1) == minValue)

谢谢!

【问题讨论】:

  • 是的,您可以使用min 函数的第二个输出参数删除最后一行:[minValue, indicesMin]= min(x(indicesCandidates,1));

标签: matlab sorting matrix indexing


【解决方案1】:

继续 cmets 中的建议,您只能采用 min 的第二个输出:

[~,indicesMin] = min(x(indicesCandidates,1))

如果你真的不需要minValue。

【讨论】:

    【解决方案2】:

    当然还有不做任何改变的单线

    [~,indices] = min(x(x(:,2) < 5,1));
    

    真正的问题是更快是什么意思?如果您对事物进行概要分析,它们几乎都是一样的。

    【讨论】:

    • 然而,这个解决方案将非常特定于示例,而indicesCandidates 似乎在代码运行期间可能会发生变化,并且仅在 OP 示例中它保持固定。
    • @EBH 我完全不明白你的评论。 indicesCandidates 可以变化,5 的值也可以变化。那里的任何东西都没有什么神圣之处。例如[~, idx] = min(x(x(searchRows,searchCols) &lt; limitValue, finalColumns)); 将允许一切变化,但仍然是一条线......
    • 值5 不是变量。
    猜你喜欢
    • 2011-10-03
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2012-03-24
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多