2014-09-24 91 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); 

这应该会加快你的代码至少有一点。