簡體   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