簡體   English   中英

在矩陣中查找最小非零值

[英]Find the minimum non zero value in a matrix

我正在嘗試找到一個二維數組,表示3d數組中第三維的最小值

a = floor(rand(10,10,3).*100); % representative structure
b = min(a,[],3); % this finds the minimum but also includes 0 

我試過用:

min(a(a>0),3) 

但這不正確? 我想我可以對a的第三維進行排序,然后在1:depth-1中找到最小值 - 但這似乎不是最有效的方法嗎?

有什么想法嗎?

問題是a(a>0)返回一個線性數組,因此最終只有一個最小值,而不是具有最小值的2D數組。

采用最小非零值的最安全方法是用Inf屏蔽它們,這樣零點不會干擾最小值的計算。

tmp = a;
tmp(tmp==0) = Inf;

b = min(tmp,[],3);

一種可能性是簡單地使所有零值非常大。

例如,如果您知道任何元素都不會大於1000,那么您可以使用

b = min(a+1000*(a==0),[],3)

只需將值為零的那些點指定為無窮大,所以總是最小答案不會計為零......就像a(a == 0)= inf; %然后計算最小一個minelement = min(a);

從矩陣中刪除零元素,如下所示:

    a = [10 2 0 4 5; 156 1.7 45 23 0 ];
    a(a == 0) = NaN;% not a number
    min(a(:))
    >> ans = 1.7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM