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