【发布时间】:2015-01-05 20:25:05
【问题描述】:
我需要找到整个矩阵的最小值,它是“坐标”。 在像
这样的矩阵中matrix = 8 7 6 5
4 3 2 1
在 (2, 4) 处最小值为 1。
【问题讨论】:
标签: matlab
我需要找到整个矩阵的最小值,它是“坐标”。 在像
这样的矩阵中matrix = 8 7 6 5
4 3 2 1
在 (2, 4) 处最小值为 1。
【问题讨论】:
标签: matlab
这可以通过使用find 非常简单地完成,您可以使用它的两个输出版本。因此,您要做的是在矩阵中搜索与矩阵中的最小值匹配的那些行和列位置。
因此:
[row, col] = find(matrix == min(matrix(:)));
row 和 col 将包含等于此最小值的 matrix 的行和列位置。请注意,我必须通过执行matrix(:) 将矩阵展开为向量。原因是如果您在矩阵上使用min,默认情况下它会为您提供每列的最小值。因为你想找到整个矩阵的最小值,你可以把它转换成一个向量,然后沿着整个向量求最小值。
请注意,这将返回与最小值匹配的 all 行和列位置,因此它实际上会将 row 和 col 作为 N x 1 列向量,其中 N 是matrix 中等于最小值的元素总数。
如果你只想要 一个 匹配,只需将 1 作为第二个参数附加到 find:
[row, col] = find(matrix == min(matrix(:)), 1);
【讨论】:
另一个适用于任意维数的张量的选项是将min 与线性索引一起使用,然后在需要时使用ind2sub 来恢复精确的索引。
[~, nIndex] = min(matrix(:));
[nIndex1, nIndex2, nIndex3, ...] = ind2sub(size(matrix), nIndex);
【讨论】:
ind2subs 在我的 MATLAB 发行版中不存在。我还在 MATLAB 文档上搜索了这个函数,但它不存在。撤回我的投票。对不起!
ind2sub。