在矩阵中查找最小非零值

时间:2012-06-27 19:56:20

标签: matlab multidimensional-array

我正在尝试找到一个二维数组,表示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中找到最小值 - 但这似乎不是最有效的方法吗?

有什么想法?

4 个答案:

答案 0 :(得分:8)

问题是a(a>0)返回一个线性数组,因此最终只有一个最小值,而不是具有最小值的二维数组。

采用最小非零值的最安全方法是使用Inf对其进行掩码,以便零不会干扰最小值的计算。

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

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

答案 1 :(得分:3)

一种可能性就是简单地使所有零值非常大。

例如,如果您知道任何元素都不会大于1000,您可以使用

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

答案 2 :(得分:0)

简单地指定那些值为零的无穷大点,所以总是最小答案不会计算为零....... A(A == 0)= INF; %然后计算最小值 minelement =分钟(一);

答案 3 :(得分:0)

从矩阵中删除零元素,如下所示:

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