2014-05-24 20 views

回答

6

1.使用unique

使用unique'stable'選項,以保持秩序 -

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

輸出 -

out = 
    8  9  3  5  2  1 

如果你不關心維持秩序的唯一編號,您可以使用unique而不需要'stable'選項 -

A1 = unique(A) 
out = A1(A1~=-1) 

可如果你到那些被轉換成一個密集的一個班輪 -

out = nonzeros(unique(A).*(unique(A)~=-1)) 

II。使用setdiff

使用setdiff'stable'選項,以保持秩序 -

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

使用setdiff默認版本,如果你不關心爲了一襯 -

out = setdiff(A,-1) 

最後,您可以通過numel(out)獲得這些唯一編號的計數。

+0

Hei @Divakar,你能解釋一下你的代碼/答案嗎? 「獨特」是做什麼的?和'穩定'?和'reshape'部分中的空括號? - 每當你有時間 - :)謝謝! PS:你當然有我的投票! –

+0

嗨@SergioHaram!那麼重塑的部分就是將'A'作爲一個向量,其中包含以行優先順序排列的元素,'stable'選項則保留那個整形向量中唯一值的順序,因爲它不會是'8 9 3 5 2 1「,否則。感謝一如既往的投票! :) – Divakar

+0

感謝澄清! –