假设我有一个数组 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
变量),但性能影响较小。
编辑:数组已排序并且仅包含整数。
最佳答案
由于我们知道数组已经排序,因此我们可以跳过 MATLAB unique
函数执行的一些检查。 MATLAB内部使用的方法如下(减去检查)
n = 1:numel(array1);
d = [true,diff(array1)~=0];
uniqueIndex = n(d);
这至少会加快你的代码速度。
关于matlab - 查找唯一值的索引时 "unique"函数的替代方案(Matlab),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26007606/