假设我有一个数组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
变量),但性能影响较小。
编辑:数组已排序并仅包含整数。
答案 0 :(得分:4)
由于我们知道数组已经排序,我们可以跳过MATLAB unique
函数执行的一些检查。 MATLAB内部使用的方法如下(减去检查)
n = 1:numel(array1);
d = [true,diff(array1)~=0];
uniqueIndex = n(d);
这应该至少可以加快你的代码。