【问题标题】:matlab how to get min value and its index in a matrixmatlab如何获取矩阵中的最小值及其索引
【发布时间】:2016-06-30 01:07:48
【问题描述】:

我有一个矩阵,可以这样说

A=[1 3 6 2 0 4
   6 8 9 5 1 4
   7 2 7 8 9 2]

我想获得给定行 (r) 和列在区间内 ([c.. c+x]) 的最小值。我也想要索引(它的列数)。 我可以用

得到最小值
MinVal=min(A(r,c:c+x))

例子

MinVal=min(A(2,3:3+2))

会给我

 % MinVal= 1

这个 MinVal 的索引是 I= 5,因为它在第 5 列(我已经知道该行并且不需要它)。

但是如何得到这个索引呢?

如果我这样做,我就得不到我想要的

 [MinVal,I]=min(A(r,c:c+x))

【问题讨论】:

  • 顺便说一句,I中的值不对应行数和列数之和,是最小值所在的列数,对我来说它返回3,这是位置1 在子矩阵中
  • 是的,我弄错了,我改了。是的,但我想要整个矩阵中的位置而不是子矩阵。对于这个例子,我希望它给出 5 而不是 3。
  • [MinVal,I] = min(A(r,c:c+x))I += (c - 1) 应该这样做...? (是的,我的 matlab 太生疏了,无法将两个表达式组合成一个)
  • 谢谢,我是这样做的,但我想也许有一种从一开始就可以得到它的方法。
  • 好的,两行也不长:)。只是想检查是否存在更短的方法。无论如何,您可以将其放在答案中,以便我接受。

标签: matlab min


【解决方案1】:

这可能不是最短的代码,但很容易理解:

创建一个掩码,指示您在子矩阵中使用哪些变量:

 M=false(size(A));
 M(r,c:c+x)=true; %use the same indexing operation

转换为线性索引:

M=find(M);

并使用它将 I 转换为完整矩阵中的索引:

M(I)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-10-17
    相关资源
    最近更新 更多