matlab - 查找唯一值的索引时 "unique"函数的替代方案(Matlab)

标签 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 变量),但性能影响较小。

编辑:数组已排序并且仅包含整数。

最佳答案

由于我们知道数组已经排序,因此我们可以跳过 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/

相关文章:

arrays - 合并多个元胞数组

matlab - 在 matlab 中更改图形 View

matlab - 如何在 MATLAB 中使用 fft 从录制的声音中去除噪声?

java - 如何使dicom图像分析应用程序平台的.m独立

matlab - 如何在 MATLAB 中查看图像的像素值?

matlab - 在图表中的 2 点之间绘制一条线

matlab - 忽略 NaN 的移动平均线

arrays - 在Matlab中直接获取数组/单元格的元素

matlab - Inputdlg 未检测到换行符

matlab - 无法获得 Σ-Δ 调制器所需的 FFT