在查找唯一值的索引时,“唯一”函数的替代方法(Matlab)

时间:2014-09-24 02:35:47

标签: matlab

假设我有一个数组array1,如下所示:

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 个答案:

答案 0 :(得分:4)

由于我们知道数组已经排序,我们可以跳过MATLAB unique函数执行的一些检查。 MATLAB内部使用的方法如下(减去检查)

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

这应该至少可以加快你的代码。