【问题标题】:Finding the index of the smallest element in a 3-dimensional matrix (or n-dimensional)查找 3 维矩阵(或 n 维)中最小元素的索引
【发布时间】:2014-01-03 19:32:01
【问题描述】:

我有一个矩阵D(i,j,k),我想找到i,j,k,从而最小化x

x = D(i,j,k)

例如:

D = rand(10,10,10);
min(min(min(D))) = 0.5123; %The smallest element in D

我想知道的是给出 0.5123 的 D 的索引

我该怎么做? 谢谢, 艾略特

【问题讨论】:

  • 你的问题很不清楚。请通过例如澄清您的问题添加一个例子。什么是“最小对”?
  • 是的,那部分并不重要
  • 我想现在很清楚了
  • 对不起,我不知道!
  • @ElliotG 对您的旧问题也是如此;)

标签: matlab matrix octave


【解决方案1】:

尝试mincolon 运算符,然后ind2sub

[xmin,ind] = min(D(:));
[ii,jj,kk] = ind2sub(size(D),ind)

【讨论】:

    【解决方案2】:

    answer by @chappjc 非常适合 3D 外壳。

    对于 n 的情况,将 comma-separated list 用作 ind2sub 的输出,该 comma-separated list 从大小为 n

    indices = cell(1,ndims(D)); %// define number of indices (size of cell array)
    [minVal linInd] = min(D(:)); %// linear index of minimizer
    [indices{:}] = ind2sub(size(D),linInd); %// return indices in cell array
    indices = cell2mat(indices); %// convert to nx1 vector containing the indices
    

    【讨论】:

    • 泛化很好。逗号分隔列表与元胞数组一起使用的绝佳示例。
    • @chappjc 感谢您提醒我有关“逗号分隔列表”的名称。我已经编辑了答案。
    • @chappjc 和 Luis Mendo,我向你优雅的回答鞠躬。
    • 抱歉,我给 chappjc 打了勾,因为他的答案更适合 3D。
    • @ElliotG 我同意。你无法击败他对 3D 案例的回答
    【解决方案3】:

    您可以使用find 函数。

    D = rand(10,10,10);
    [I, J]=find(D == min(min(min(D))));
    

    请注意,对于多于 2 维的矩阵:

    如果 X 是 N > 2 的 N 维数组,则 J 是 N-1 尾随的线性索引 X的尺寸

    见:http://www.mathworks.com/company/newsletters/articles/matrix-indexing-in-matlab.html

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 2012-09-10
      • 2014-04-22
      • 2021-09-14
      • 2013-01-03
      • 1970-01-01
      相关资源
      最近更新 更多