27.1 Set Operations

Last-modified: 2025-03-08 (土) 14:46:07

27.1 集合演算

Octave はいくつかの基本的な集合演算をサポートしています。Octave は 2 つの集合の和集合、積集合、差集合を計算できます。また、Octave は 排他的論理和集合演算もサポートしています。

集合演算の関数はすべて同じように動作し、2つの入力集合を受け取り、3つ目の集合を返します。例として、とに2つの集合が含まれている aと 仮定すると、b

union (a, b)

2 つのセットの結合を計算します。

最後に、要素がセットに属しているかどうかの判定は、 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 (…)
aとb の両方に共通する一意の要素を返します。

aとbが両方とも行ベクトルの場合は行ベクトルを返します。それ以外の場合は列ベクトルを返します。入力は文字列のセル配列にすることもできます。

オプションの入力が指定されている場合は、 aとb"rows"の共通行を返します 。このオプションを使用するには、入力は 2 次元の数値行列である必要があります。

オプションの引数"sorted"/ は、"stable"出力に表示される一意の値の順序を制御します。デフォルトは で "sorted"、出力の値は昇順に配置されます。代替案では"stable"、入力で見つかった順序が保持されます。

要求された場合、および となる列インデックス ベクトルiaとibを返します。 c = a(ia)c = b(ib)

プログラミング ノート: 入力フラグは、R2012b より前の MATLAB"legacy"リリースと互換性があるようにアルゴリズムを変更します。

See also: 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 (…)
aまたはb のいずれかに含まれる一意の要素を返します。

aとbが両方とも行ベクトルの場合は行ベクトルを返します。それ以外の場合は列ベクトルを返します。入力は文字列のセル配列にすることもできます。

オプションの入力が指定されている場合は、 aまたはb"rows"のいずれかにある行を返します。このオプションを使用するには、入力は 2 次元の数値行列である必要があります。

オプションの引数"sorted"/ は、"stable"出力に表示される一意の値の順序を制御します。デフォルトは で "sorted"、出力の値は昇順に配置されます。代替案では"stable"、入力で見つかった順序が保持されます。

オプションの出力iaとib は、 と が互いに素な集合であり、その和集合が c となるような列インデックスベクトルです。 a(ia)b(ib)

プログラミング ノート: 入力フラグは、R2012b より前の MATLAB"legacy"リリースと互換性があるようにアルゴリズムを変更します。

See also: 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 (…)
bにないa内の一意の要素を返します。

が行ベクトルの場合は行ベクトルを返します。それ以外の場合は列ベクトルを返します。入力は文字列のセル配列にすることもできます。

オプションの入力が指定されている場合は、 bにないa"rows"の行を返します 。このオプションを使用するには、入力は 2 次元の数値行列である必要があります。

オプションの引数"sorted"/ は、"stable"出力に表示される一意の値の順序を制御します。デフォルトは で "sorted"、出力の値は昇順に配置されます。代替案では"stable"、入力で見つかった順序が保持されます。

要求された場合、となる インデックス ベクトルiaを返します。 c = a(ia)

プログラミング ノート: 入力フラグは、R2012b より前の MATLAB"legacy"リリースと互換性があるようにアルゴリズムを変更します。
See also: 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 (…)
セットaまたはbに固有の要素を返します。

aとbが両方とも行ベクトルの場合は行ベクトルを返します。それ以外の場合は列ベクトルを返します。入力は文字列のセル配列にすることもできます。

オプションの入力が指定されている場合は、セットaとb"rows"に含まれない行を返します。このオプションを使用するには、入力は 2 次元の数値行列である必要があります。

オプションの引数"sorted"/ は、"stable"出力に表示される一意の値の順序を制御します。デフォルトは で "sorted"、出力の値は昇順に配置されます。代替案では"stable"、入力で見つかった順序が保持されます。

オプションの出力iaとib は、 と が互いに素な集合であり、その和集合が c となるような列インデックスベクトルです。 a(ia)b(ib)

プログラミング ノート: 入力フラグは、R2012b より前の MATLAB"legacy"リリースと互換性があるようにアルゴリズムを変更します。
See also: 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) に なります。

2 番目の出力引数が要求された場合、一致する各要素の s内のインデックスも返されます。

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

入力aとs はセル配列の場合もあります。

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

オプションの 3 番目の引数"rows"が指定されている場合は、 aの行をsの行と比較します。このオプションを使用するには、入力は同じ数の列を持つ 2 次元行列である必要があります。

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];

See also: 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

2 番目の出力引数が要求された場合、一致する各要素の s内のインデックスも返されます。

入力aとs は数値である必要があります。

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

オプションのプロパティ/値のペアを指定して、関数の動作を変更できます。プロパティは、次のいずれかの文字列になります。

"ByRows"
に設定されている場合false(デフォルト)、aとsのすべての要素は別々に扱われます。 に設定されている場合true、tf は、指定された許容値内でsの行と一致するatrue の各行に対して行われます。 uとv の2 つの行は、条件 を満たす場合、許容値内にあります。 all (abs (u-v) <= tol*max (abs ([a;s])))

"OutputAllIndices"
に設定されている場合false(デフォルト)、s_idx には一致の 1 つに対するインデックスが含まれます。 に設定されている場合true、s_idx は、 a内の対応する値の許容範囲内にあるs内のすべての要素のインデックスを含むセル配列です。

"DataScale"
指定された値DS は、許容差テストのスケール係数を に変更するために使用されます。デフォルトでは、 aとsの最大絶対値がスケール係数として使用されます。 abs (u-v) <= tol*DS

例:

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

See also: ismember, lookup, unique, union, intersect, setdiff, setxor.

: p = powerset (a)
: p = powerset (a, "rows")
集合aのべき集合(すべての部分集合)を計算します。

セットaは数値行列または文字列のセル配列である必要があります。出力は常にベクトルまたは文字列のセル配列になります。

オプションの引数 を使用すると"rows"、セットaの各行はセットの 1 つの要素と見なされます。この引数を使用するには、入力は 2 次元の数値行列である必要があります。
See also: unique, union, intersect, setdiff, setxor, ismember.