27.1 集合运算

Octave 支持几种基本的集合运算。Octave 可以计算两个集合的并集、交集和差集。Octave 还支持异或(Exclusive Or)集合运算。

集合运算的函数都以相同的方式工作:接受两个输入集合并返回第三个集合。例如,假设ab包含两个集合,则

union (a, b)

计算两个集合的并集。

最后,可以使用ismember函数来确定元素是否属于某个集合。因为集合是有序的,所以这个操作非常高效,其时间复杂度为 O(log2(n)),优于时间复杂度为 O(n) 的find函数。

 
c = intersect (a, b)
c = intersect (a, b, "rows")
c = intersect (…, "sorted")
c = intersect (…, "stable")
c = intersect (…, "legacy")
[c, ia, ib] = intersect (…)

返回同时存在于ab中的唯一元素。

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

如果给定了可选输入"rows",则返回ab中共同的行。输入必须是二维数值矩阵才能使用此选项。

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

如果指定了输出参数,则返回列索引向量iaib,使得c = a(ia)c = b(ib)

编程说明:输入标志"legacy"会将算法更改为与 R2012b 之前的 MATLAB 版本兼容。

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

 
c = union (a, b)
c = union (a, b, "rows")
c = union (…, "sorted")
c = union (…, "stable")
c = union (…, "legacy")
[c, ia, ib] = union (…)

返回存在于ab中的唯一元素。

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

如果给定了可选输入"rows",则返回存在于ab中的行。输入必须是二维数值矩阵才能使用此选项。

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

可选输出iaib是列索引向量,使得a(ia)b(ib)是不相交的集合,它们的并集是c

编程说明:输入标志"legacy"会将算法更改为与 R2012b 之前的 MATLAB 版本兼容。

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

 
c = setdiff (a, b)
c = setdiff (a, b, "rows")
c = setdiff (…, "sorted")
c = setdiff (…, "stable")
c = setdiff (…, "legacy")
[c, ia] = setdiff (…)

返回在a中但不在b中的唯一元素。

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

如果给定了可选输入"rows",则返回在a中但不在b中的行。使用此选项时,输入必须是二维数值矩阵。

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

如果指定了输出参数,则返回索引向量ia,使得c = a(ia)

编程说明:输入标志"legacy"会将算法更改为与 R2012b 之前的 MATLAB 版本兼容。

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

 
c = setxor (a, b)
c = setxor (a, b, "rows")
c = setxor (…, "sorted")
c = setxor (…, "stable")
c = setxor (…, "legacy")
[c, ia, ib] = setxor (…)

返回仅属于集合ab(但不同时属于两者)的唯一元素。

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

如果给定了可选输入"rows",则返回仅属于集合ab的行。输入必须是二维数值矩阵才能使用此选项。

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

可选输出iaib是列索引向量,使得a(ia)b(ib)是不相交的集合,它们的并集是c

编程说明:输入标志"legacy"会将算法更改为与 R2012b 之前的 MATLAB 版本兼容。

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

 
tf = ismember (a, s)
tf = ismember (a, s, "rows")
[tf, s_idx] = ismember (…)

返回一个与a形状相同的逻辑矩阵tf,如果a中的元素在s中找到则为 true (1),否则为 false (0)。

如果请求第二个输出参数,则同时返回每个匹配元素在s中的索引。

a = [3, 10, 1];
s = [0:9];
[tf, s_idx] = ismember (a, s)
     ⇒   tf = [1, 0, 1]
     ⇒   s_idx = [4, 0, 2]

输入as也可以是元胞数组。

a = {"abc"};
s = {"abc", "def"};
[tf, s_idx] = ismember (a, s)
     ⇒   tf = 1
     ⇒   s_idx = 1

如果给定了可选的第三个参数"rows",则将a中的行与s中的行进行比较。输入必须是具有相同列数的二维矩阵才能使用此选项。

a = [1:3; 5:7; 4:6];
s = [0:2; 1:3; 2:4; 3:5; 4:6];
[tf, s_idx] = ismember (a, s, "rows")
     ⇒   tf = logical ([1; 0; 1])
     ⇒   s_idx = [2; 0; 5];

另请参阅: lookup, unique, union, intersect, setdiff, setxor, ismembertol.

 
tf = ismembertol (a, s)
tf = ismembertol (a, s, tol)
tf = ismembertol (a, s, name, value)
[tf, s_idx] = ismembertol (…)

检查值是否在指定容差范围内属于一个集合的成员。

此函数返回一个与a形状相同的逻辑矩阵tf,如果a中的元素在容差tol范围内接近s中的某个值则为 true (1),否则为 false (0)。如果未指定tol,则使用默认容差1e-6

如果请求第二个输出参数,则同时返回每个匹配元素在s中的索引。

输入as必须是数值。

a = [3, 10, 1];
s = [0:9];
[tf, s_idx] = ismembertol (a, s)
     ⇒   tf = [1, 0, 1]
     ⇒   s_idx = [4, 0, 2]

可以提供可选的属性/值对来更改函数的行为。属性可以是以下字符串之一:

"ByRows"

如果设置为false(默认值),则将as中的所有元素单独处理。如果设置为true,则对于a中与s中的某行在给定容差内匹配的每一行,tf将为true。两行uv如果满足条件all (abs (u-v) <= tol*max (abs ([a;s]))),则认为它们在容差范围内。

"OutputAllIndices"

如果设置为false(默认值),则s_idx包含其中一个匹配项的索引。如果设置为true,则s_idx是一个元胞数组,包含s中所有在容差范围内与a中对应值匹配的元素的索引。

"DataScale"

提供的值DS用于将容差测试中的比例因子更改为abs (u-v) <= tol*DS。默认情况下,使用as中的最大绝对值作为比例因子。

示例:

s = [1:6].' * pi;
a = 10.^log10 (x);
[tf, s_idx] = ismembertol (a, s);

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

 
p = powerset (a)
p = powerset (a, "rows")

计算集合a的幂集(所有子集)。

集合a必须是数值矩阵或字符串的元胞数组。输出将始终是向量或字符串的元胞数组。

如果使用了可选参数"rows",则集合a的每一行被视为集合的一个元素。输入必须是二维数值矩阵才能使用此参数。

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


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

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