MATLAB Unique

2025 年 7 月 28 日 | 阅读 7 分钟

引言

MATLAB 中的 unique 函数是一个强大的工具,用于识别和提取数组、单元数组和表中的唯一元素。它在处理不同数据类型方面的灵活性以及提供有关索引的额外信息,使其成为各种应用中的宝贵资产。

unique 函数就是这样一个多功能函数,它在识别和提取数组或表中的唯一元素,消除重复项方面发挥着至关重要的作用。在本综合指南中,我们将探讨 MATLAB 中 unique 函数的语法、应用和细微差别。

unique 函数的语法

MATLAB 中的 unique 函数的通用语法如下:

A: 输入数组或向量。

C: 输入数组 A 中唯一值的向量。

a: 索引向量,将 C 中的值映射到输入数组 A 中的相应值。

ic: 索引向量,将输入数组 A 中的每个元素映射到 C 中的相应值。

unique 函数的输出不仅提供了数组中的唯一值,还提供了关于其索引的信息。

基本用法

让我们从一个简单的例子开始,来说明 unique 函数的基本用法:

输出

MATLAB Unique

说明

在此示例中,数组 A 包含重复值,并将其应用于 unique 函数。唯一值存储在向量 C 中,这些值在原始数组中的索引存储在向量 ia 中,以及用于从唯一值重建原始数组的索引存储在向量 ic 中。

创建数组

A = [2, 4, 1, 3, 2, 4, 3, 5];

创建了一个名为 A 的数组,包含八个元素,其中一些是重复的。

将 unique 应用于数组

[C, ia, ic] = unique(A);

C:包含原始数组的唯一值。

ia:包含原始数组中唯一值的索引。

ic:包含从唯一值重建原始数组的索引。

显示唯一值

disp('Unique Values:');

disp(C);

这将显示在数组 A 中找到的唯一值。

显示原始数组中唯一值的索引

disp('Indices of Unique Values in Original Array:');

disp(ia);

这将显示原始数组中唯一值的索引。它显示了原始数组中唯一值的位置。

显示重建原始数组的索引

disp('Indices to Reconstruct Original Array:');

disp(ic);

这将显示可用于从唯一值重建原始数组的索引。它提供了一种从唯一值映射回原始数组的方法。

处理不同的数据类型

unique 函数的优点之一是它能够处理各种数据类型。它不仅限于数值数组;它可以应用于字符数组、单元数组,甚至表。

字符数组示例

输出

MATLAB Unique

在此示例中,将字符数组用作 unique 函数的输入。相同的原理适用,输出向量 C_char、ia_char 和 ic_char 提供了有关唯一值及其索引的信息。

单元数组示例

输出

MATLAB Unique

在这里,使用 unique 函数处理包含字符串的单元数组。生成的向量提供了对唯一值及其位置的见解。

高级选项

MATLAB 中的 unique 函数还提供了高级选项,可以根据特定需求自定义其行为。

对输出进行排序

默认情况下,unique 函数按元素在输入数组中出现的顺序返回唯一值。

但是,对输出进行排序可能很有用。这可以通过使用附加参数来实现:

示例

输出

MATLAB Unique

在此示例中,使用“sorted”选项以排序顺序获取唯一值。

稳定性排序

有时,保持每个唯一值首次出现的顺序很重要。

为此目的可以使用“stable”选项:

输出

MATLAB Unique

在这里,“stable”选项可确保保留每个唯一值首次出现的顺序。

行或列

示例

通过指定“rows”或“columns”选项,可以将 unique 函数应用于矩阵的行或列:

输出

MATLAB Unique

说明

在此示例中,使用“rows”选项将 unique 函数应用于矩阵的行。

创建矩阵

matrix = [1, 2, 3; 4, 5, 6; 1, 2, 3; 7, 8, 9];

创建了一个名为 matrix 的矩阵,包含四行三列。第一行和第三行是相同的。

将 unique 应用于行

[C_rows, ia_rows, ic_rows] = unique(matrix, 'rows');

C_rows: 包含原始矩阵的唯一行。

ia_rows: 包含原始矩阵中唯一行的索引。

ic_rows: 包含从唯一行重建原始矩阵的索引。

显示唯一行

disp('Unique Rows:');

disp(C_rows);

这将显示 matrix 变量中找到的唯一行。

显示原始矩阵中唯一行的索引

disp('Indices of Unique Rows in Original Matrix:');

disp(ia_rows);

这将显示原始矩阵中唯一行的索引。换句话说,它显示了原始矩阵中唯一行的位置。

显示重建原始矩阵的索引

disp('Indices to Reconstruct Original Matrix from Unique Rows:');

disp(ic_rows);

该代码演示了如何在 MATLAB 中使用带“rows”选项的 unique 函数来标识和提取矩阵中的唯一行。然后显示生成的唯一行、它们在原始矩阵中的索引以及用于重建原始矩阵的索引。

性能考虑

在处理大型数据集时,unique 函数的性能成为一个关键因素。了解底层机制有助于优化其使用。

时间复杂度

unique 函数的时间复杂度取决于所使用的算法。MATLAB 根据输入数据的特性采用不同的算法。例如,当数据是数字或字符时使用排序算法,而对于单元数组则使用哈希。

内存使用

内存消耗是另一个重要的考虑因素,尤其是在处理大型数据集时。排序算法可能需要额外的内存,这会影响函数性能。

向量化

利用 MATLAB 的向量化操作可以显著提高 unique 函数的性能。向量化代码针对数组操作进行了优化,MATLAB 被设计用于高效地执行这些操作。

向量化操作通常优于 MATLAB 中的基于循环的对应操作。

理解 unique 函数的语法和高级选项,用户可以根据特定需求定制其行为。无论处理数值数组、字符数组、单元数组还是表,unique 函数都提供了一种一致且高效的方法来处理 MATLAB 中的重复值。

  • 在使用大型数据集时,考虑 unique 函数的性能影响至关重要。
  • 通过利用向量化操作和了解底层算法来优化代码,可以显著提高执行时间和内存使用量。