9

我试图找到一个 2d 数组,它表示 3d 数组中第 3 维的最小值。例如

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

4 回答 4

8

问题是它a(a>0)返回一个线性数组,所以你最终会得到一个最小值,而不是一个具有最小值的二维数组。

获取非零值最小值的最安全方法是用 屏蔽它们Inf,这样零值就不会干扰最小值的计算。

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

b = min(tmp,[],3);
于 2012-06-27T20:51:06.653 回答
3

一种可能性是简单地使所有零值都很大。

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

b = min(a+1000*(a==0),[],3)
于 2012-06-27T20:21:20.463 回答
0

只需将值为零的那些点分配为无穷大,因此最小答案始终不会计数为零.....就像 a(a==0)=inf; % 然后计算最小的一个 minelement=min(a);

于 2013-01-25T15:45:07.023 回答
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
于 2017-10-19T11:20:46.800 回答