[英]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.