繁体   English   中英

在Matlab中找到三维数组最小值的位置

[英]Find the position of the minimal value of a three dimensional array in Matlab

很抱歉提出这么简单愚蠢的问题,但Matlab真的太难用了。 我的问题是如何在Matlab中找到三维数组最小值的位置。

例如,假设我定义了一个三维数组

m=zeros(2,2,2);
m(1,2,2)=-2;

m的最小值应为-2 ,位于(1,2,2) 我可以找到最小值

m0=min(min(min(m)));

但是当我通过使用找到它的位置

[x y z]=find(m==m0);

而不是返回x=1y=2z=2 ,它返回x=1y=4z=1

我很感激有人会回答这个问题!

您可以使用min来查找m的最小索引,然后将其转换为xyz坐标。 没有必要使用find

min可以与多个输出参数一起使用,以返回最小元素的索引。 在这里,我还使用:m每个元素作为列向量返回。

>> m=zeros(2,2,2);
>> m(1,2,2)=-2;
>> m(:)
ans =
     0
     0
     0
     0
     0
     0
    -2
     0
>> [~, ind] = min(m(:))
ind =
     7

现在我们需要将索引转换回xyz坐标。 这可以使用ind2sub或手动手动完成。

>> [x y z] = ind2sub(size(m), ind)
x =
     1
y =
     2
z =
     2

你说的没错。 这比它应该更复杂。 问题是MATLAB硬连线使用矩阵(即等级2的数组),而不是一般等级的数组。 这是解决方案:

m0 = min(m(:))
[x y z] = ind2sub(size(m), find(m(:) == m0))

说明:

如果您键入help find ,您可能会注意到您的原始代码使用了find[rows, cols, vals]版本,这不是您所期望的。

相反, min(m(:))是你的min(min(min(m)))的简化。 它自动将m重塑为一级数组(即向量)。

表达式find(m(:) == m0)返回此重新形状向量中最小位置的单个索引。 最后, ind2sub将此单个索引转换为一组三个索引,给定m的形状。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM