27.1集合运算

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

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

union (a, b)

计算两个集合的并集。

最后,可以使用ismember作用因为集合是有序的,所以这里的运算是非常有效的,并且是O(log2(n))阶,这比find具有O(n)阶的函数。

 
: 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"将算法更改为与兼容MATLABR2012b之前的版本。

详见: 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"将算法更改为与兼容MATLABR2012b之前的版本。

详见: 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"将算法更改为与兼容MATLABR2012b之前的版本。

详见: 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"将算法更改为与兼容MATLABR2012b之前的版本。

详见: unique, union, intersect, setdiff, ismember.

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

返回逻辑矩阵tf形状与相同a如果元素在a在中找到s如果不是,则为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"则比较rowsina中有行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 (…)

检查值是否是误差范围范围内集合的成员。

此函数返回一个逻辑矩阵tf形状与相同a这为真(1)其中的元素a接近s在误差范围范围内tol如果不是,则为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, tftrue中的每一行a与中的一行相匹配s在允许的范围内。两排,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-2025 Octave中文网

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