在矩阵中查找最小非零值

tri*_*can 8 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 
Run Code Online (Sandbox Code Playgroud)

我试过用:

min(a(a>0),3) 
Run Code Online (Sandbox Code Playgroud)

但这不正确?我想我可以对a的第三维进行排序,然后在1:depth-1中找到最小值 - 但这似乎不是最有效的方法吗?

有什么想法吗?

Jon*_*nas 8

问题是a(a>0)返回一个线性数组,所以最终会得到一个最小值,而不是带有最小值的2D数组.

采用最小非零值的最安全方法是用它们掩盖它们Inf,这样零点不会干扰最小值的计算.

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

b = min(tmp,[],3);
Run Code Online (Sandbox Code Playgroud)