27 集合

Octave 提供了多个用于管理数据集合的函数。集合被定义为唯一元素的集合,通常由按升序排列的数字向量表示。任何向量或矩阵都可以通过 unique 函数去除重复项来转换为集合。但是,并不需要显式地创建集合,因为所有对集合进行操作的函数都会在操作前自动将其输入转换为集合。

 
y = unique (x)
y = unique (x, "rows")
y = unique (…, "sorted")
y = unique (…, "stable")
[y, i, j] = unique (…)
[y, i, j] = unique (…, "first")
[y, i, j] = unique (…, "last")
[y, i, j] = unique (…, "legacy")

返回 x 的唯一元素。

如果输入 x 是列向量,则返回列向量;否则返回行向量。x 也可以是字符串元胞数组。

如果指定了可选参数 "rows",则返回 x 的唯一行。使用此选项时,输入必须是二维数值矩阵。

可选参数 "sorted"/"stable" 控制唯一值在输出中的出现顺序。默认值为 "sorted",输出中的值按升序排列。另一种选项 "stable" 则保留输入 x 中原始的顺序。

如果指定了输出参数,则返回列索引向量 ij,使得 y = x(i)x = y(j)

此外,如果请求输出 i,则可以指定标志 "first""last"。如果指定了 "last",则返回 i 中尽可能大的索引;如果指定了 "first",则返回尽可能小的索引。默认值为 "first"

示例 1:排序顺序

unique ([3, 1, 1, 2])
⇒   [1, 2, 3]
unique ([3, 1, 1, 2], "stable")
⇒   [3, 1, 2]

示例 2:索引选择

[~, i] = unique ([3, 1, 1, 2], "first")
⇒   i = [2; 4; 1]
[~, i] = unique ([3, 1, 1, 2], "last")
⇒   i = [3; 4; 1]

编程说明:输入标志 "legacy" 会将算法切换为与 R2012b 之前的 MATLAB 版本兼容。具体来说,索引排序标志会更改为 "last",并且输出 ij 的形状将跟随输入 x 的形状,而不总是列向量。

另请参阅: uniquetol, union, intersect, setdiff, setxor, ismember

 
c = uniquetol (A)
c = uniquetol (A, tol)
c = uniquetol (…, property, value)
[c, ia, ic] = uniquetol (…)

返回 A 中在容差 tol 范围内的唯一元素。

两个值 xy 满足 abs (x - y) <= tol * max (abs (A(:))) 时,即被视为在相对容差范围内。

输入 A 必须是实数(非复数)浮点类型(double 或 single)。

如果未指定 tol,对于双精度输入默认容差为 1e-12,对于单精度输入默认容差为 1e-6。

该函数也可以通过以下可选的属性/值对来调用。属性/值对必须在其他输入参数之后传递:

"ByRows"(默认值:false

如果为 true,则返回 A 的唯一行。A 必须是二维数组才能使用此选项。对于行,唯一性条件更改为 all (abs (x - y) <= tol*max (abs (A),[],1)),它将一行的每一列分量与特定于该列的容差进行比较。

"DataScale"

容差测试更改为 abs (x - y) <= tol*DS,其中 DS 是标量,除非属性 "ByRows" 为 true。在这种情况下,DS 可以是标量,也可以是长度等于 A 列数的向量。为 DS 使用值 1.0 会将容差从相对容差更改为绝对容差。使用值 Inf 将禁用测试。

"OutputAllIndices"(默认值:false

如果为 true,则 ia 是一个元胞数组(而非向量),其中包含 A 中与 C 中某个值在容差范围内的所有元素的索引。也就是说,ia 中的每个元胞对应于 C 中的一个唯一值,并且每个元胞中的值对应于 A 中的位置。

如果输入 A 是行向量,则输出 c 是行向量;对于所有其他情况,返回列向量。

可选输出 ia 是列索引向量,满足 c = A(ia)。如果 "ByRows" 属性为 true,则条件为 c = A(ia, :)。如果 "OutputAllIndices" 属性为 true,则值 A(ia{i}) 都在唯一值 c(i) 的容差范围内。

A 是向量时,可选输出 ic 是列索引向量,满足 A = c(ic)。当 A 是矩阵时,A(:) = c(ic)。如果 "ByRows" 属性为 true,则 A = c(ic,:)

示例:小的舍入误差需要使用 uniquetol 而非 unique

x = [1:5];
## Inverse_Function (Function (x)) should return exactly x
y = exp (log (x));
D = unique ([x, y])
⇒   [1   2   3   3   4   5   5]
C = uniquetol ([x, y])
⇒   [1   2   3   4   5]

另请参阅: unique, union, intersect, setdiff, setxor, ismember


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2