在matlab中计算不同的唯一数字

Tra*_*man 2 matlab unique matrix

我想计算矩阵中不同数字的数量-1.例如,以下矩阵中6的不同数字是不同的数字8 9 3 5 2 1

   -1  -1  8  9   
    3   5 -1  3
    2   3  3  1 
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做MATLAB

Div*_*kar 6

I.使用 unique

使用unique'stable'选项保持订单 -

A1 = reshape(A.',1,[])  %// A is your input matrix
out = unique(A1(A1~=-1),'stable')  %// out is your desired output
Run Code Online (Sandbox Code Playgroud)

输出 -

out =
     8     9     3     5     2     1
Run Code Online (Sandbox Code Playgroud)

如果您不关心保留唯一编号的顺序,则可以unique不使用'stable'选项使用-

A1 = unique(A)
out = A1(A1~=-1)
Run Code Online (Sandbox Code Playgroud)

如果你进入那些可以转换为密集的单行 -

out = nonzeros(unique(A).*(unique(A)~=-1))
Run Code Online (Sandbox Code Playgroud)

II.运用setdiff

使用setdiff'stable'选项,以保持秩序-

A1 = reshape(A.',1,[])  %// A is your input matrix
out = setdiff(A1,-1,'stable')  %// out is your desired output
Run Code Online (Sandbox Code Playgroud)

单行使用默认版本setdiff,如果你不关心订单 -

out = setdiff(A,-1)
Run Code Online (Sandbox Code Playgroud)

最后,您可以获得这些唯一数字的计数numel(out).