9

3 次元配列の 3 次元の最小値を表す 2 次元配列を見つけようとしています。

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 の 3 番目の次元を並べ替えて、1:depth-1 内の最小値を見つけることができると思いますが、それは最も効率的な方法ではないようです。

何かご意見は?

4

4 に答える 4

8

問題はa(a>0)、線形配列を返すため、最小値を持つ 2D 配列ではなく、最小値が 1 つになることです。

非ゼロ値の最小値を取る最も安全な方法はInf、ゼロが最小値の計算を妨げないように、 でそれらをマスクすることです。

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

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

1 つの可能性は、単純にすべてのゼロ値を非常に大きくすることです。

たとえば、要素が 1000 を超えることはないことがわかっている場合は、次のように使用できます。

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

値がゼロである点に無限大を割り当てるだけなので、常に最小の答えはゼロをカウントしません..... a(a==0)=inf; のように。%次に、最小値を 1 つ数えます 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 に答える