【问题标题】:Matlab : Minimum of matrixMatlab:矩阵的最小值
【发布时间】:2015-01-05 20:25:05
【问题描述】:

我需要找到整个矩阵的最小值,它是“坐标”。 在像

这样的矩阵中
matrix = 8 7 6 5  
         4 3 2 1

在 (2, 4) 处最小值为 1。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这可以通过使用find 非常简单地完成,您可以使用它的两个输出版本。因此,您要做的是在矩阵中搜索与矩阵中的最小值匹配的那些行和列位置。

    因此:

    [row, col] = find(matrix == min(matrix(:)));
    

    rowcol 将包含等于此最小值的 matrix 的行和列位置。请注意,我必须通过执行matrix(:) 将矩阵展开为向量。原因是如果您在矩阵上使用min,默认情况下它会为您提供每列的最小值。因为你想找到整个矩阵的最小值,你可以把它转换成一个向量,然后沿着整个向量求最小值。

    请注意,这将返回与最小值匹配的 all 行和列位置,因此它实际上会将 rowcol 作为 N x 1 列向量,其中 Nmatrix 中等于最小值的元素总数。

    如果你只想要 一个 匹配,只需将 1 作为第二个参数附加到 find

    [row, col] = find(matrix == min(matrix(:)), 1);
    

    【讨论】:

    • 我在复杂化.. 谢谢!
    • @Ain - 做了一些小错别字。我基本上错过了每一行代码的括号,但我相信你现在已经明白了!
    【解决方案2】:

    另一个适用于任意维数的张量的选项是将min 与线性索引一起使用,然后在需要时使用ind2sub 来恢复精确的索引。

    [~, nIndex] = min(matrix(:));
    [nIndex1, nIndex2, nIndex3, ...] = ind2sub(size(matrix), nIndex);
    

    【讨论】:

    • 我刚试过这段代码。 ind2subs 在我的 MATLAB 发行版中不存在。我还在 MATLAB 文档上搜索了这个函数,但它不存在。撤回我的投票。对不起!
    • 对不起,应该是ind2sub
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2017-12-08
    相关资源
    最近更新 更多