5

みんな。次の (3x3) 行列 A があるとします。

0 1 3
0 0 3
0 0 0

私の質問は、matlab を使用してその行列の一意の値を見つける方法です。この場合、結果は 1 になるはずです。

value=unique(A)

しかし、それはベクトル {0;1;3} を返しましたが、私が望むものではありません。

この問題の解決にご協力いただければ幸いです。ありがとうございました!

4

4 に答える 4

4

ここに短いものがあります

value = A(sum(bsxfun(@eq, A(:), A(:).'))==1);

行列内の要素のすべてのペアを比較し、それらが等しい回数をカウントし、1 回だけカウントされたものを返します。

于 2013-10-08T08:48:23.513 に答える
2

これは1行の代替です:

find(histc(A(:), 0:3)==1) - 1

またはより一般的に:

find(histc(A(:), min(A(:)):max(A(:)))==1) + min(A(:)) - 1

または、さらに一般化する (フロートを処理する)

p = 0.1; %//Set a precision.
(find(histc(A(:), min(A(:)):p:max(A(:)))==1) + min(A(:)) - 1)*p
于 2013-10-08T06:23:30.480 に答える