2014-09-24 43 views
2

假設我有一個數組,array1的索引時,如下:替代「獨一無二」的功能,尋找唯一值(Matlab的)

array1 = [1 2 2 2 3 3 4 4 4 5]; 

我試圖找到第一此數組中每個唯一值的索引值。這是很容易與unique函數來完成:

[~,uniqueIndex,~] = unique(array1,'first') 

產生預期的輸出:

uniqueIndex = 
    1  2  5  7 10 

我需要執行數千個非常大的陣列的這一行動,並在unique功能已經證明了自己在我的代碼中是一個巨大的瓶頸。我想知道是否有任何替代方案可以用來實現相同的最終結果(即變量uniqueIndex),但是性能影響較小。

編輯:數組被排序並且只包含整數。

+1

它可能有助於瞭解一些有關陣列的問題。它們是否包含整數?他們已經排序了嗎? – MrAzzaman 2014-09-24 02:40:12

+0

@ MrAzzaman他們的數組包含整數並且已經排序 – Alarik 2014-09-24 02:45:50

回答

4

由於我們知道數組已經排序,所以我們可以跳過一些MATLAB unique函數執行的檢查。 MATLAB在內部使用的方法如下(減去檢查)

n = 1:numel(array1); 
d = [true,diff(array1)~=0]; 
uniqueIndex = n(d); 

這應該會加快你的代碼至少有一點。