【问题标题】:Obtain location of maximum inside a 3D matrix获取 3D 矩阵内最大值的位置
【发布时间】:2020-04-29 08:58:51
【问题描述】:

如何在 MATLAB 中获得最大的三维矩阵(以前是二维的,并通过reshape 转换为三维矩阵),以便我可以在 MATLAB 中获得该最大值的位置矩阵?

我写了以下代码,但不幸的是获得的最大值的维度大于矩阵的维度。

mxshirin=max(max(frvrdin))

[X,Y,Z]=size(frvrdin)
[o,i]=find(frvrdin==mxshirin)
xo=size(o)
xi=size(i)

【问题讨论】:

    标签: matlab matrix max dimension


    【解决方案1】:

    如果 frvrdin 是 3D,max(max(frvrdin)) 将是 1x1x3 向量:

    frvrdin = rand(3,3,3);
    max(max(frvrdin))
    ans(:,:,1) =
        0.8235
    ans(:,:,2) =
        0.9502
    ans(:,:,3) =
        0.7547
    

    不要嵌套max() 函数,只需使用'all' 开关即可一次获取整个矩阵的最大值。

    max(frvrdin,[],'all')
    ans =
        0.9340
    

    如果您使用的是旧版 MATLAB,请使用列展平:max(frvrdin(:))

    你不能在两个以上的维度上使用max[val,idx]=max()的自动定位输出,所以使用findind2sub

    frvrdin = rand(3,3,3);
    val = max(frvrdin,[],'all');  % Find maximum over all dims
    idx = find(abs(frvrdin-val)<1e-10); % Compare within tolerance
    [row,col,page] = ind2sub(size(frvrdin),idx);  % Get subscript indices
    

    其中row 是第一个维度的索引,col 是第二个维度的索引,最后是page 是第三个维度的索引。

    【讨论】:

    • 谢谢。您的代码工作正常。但我想在我的 3D 矩阵的每个维度中指定最大值,然后能够正确提取最大值的位置。我写的代码没有正确计算位置。除非我每次要估计第三维时都在代码中插入一个二维矩阵,否则这将需要编写一个可能无法正常工作的循环,并且还会增加代码的大小。如果可以的话,请帮助我@Adriaan
    • @shirin 这与您最初提出的问题完全不同。另外,“每个维度的最大值”是什么意思?在这种情况下,将维度参数输入max(A,2) 仍将输出二维矩阵。
    • 对不起,我的意思是每个维度都是第三维度。谢谢你的帮助。我意识到我的问题@Adriaan
    猜你喜欢
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多