Функции обработки множеств
Множество – первичное понятие математики, не имеющее четкого определения. Под множеством подразумевается совокупность некоторых объектов, например книг в библиотеке, людей в зале или элементов вектора. В этом разделе приводятся некоторые функции для обработки множеств, представленных векторами. Они широко используются при анализе и обработке данных.
- intersect(a.b) – возвращает пересечение множеств для двух векторов а и b, т. е., общие элементы векторов а и b. Результирующий вектор отсортирован по возрастанию. Если входные массивы не являются векторами, то они рассматриваются как совокупность векторов-столбцов а=а(:) или b=b(:);
- intersect(a,b, 'rows') – возвращает строки, общие для а и b, когда а и b представляют собой матрицы с одинаковым числом столбцов;
- [c.ia.ib] = intersect(a.b) – также возвращает вектор-столбец индексов ia и ib. но так, что с = a(ia) и с = b(ib) (или с = a(ia.:) ис = b(ib.:)).
Пример:
>
>
A
=
[
1
7
2
6
]; B
=
[
7
2
3
4
6
1
];
>
>
[c,ia,ib]
=
intersect(A,B)
1
2
6
7
ia
=
1
3
4
2
ib
=
6
2
5
1
- ismember(a.S) – возвращает вектор той же длины, что и исходный а, содержащий логические единицы на месте тех элементов вектора а, которые принадлежат множеству S, и логические нули на месте тех элементов вектора а, которые не принадлежат множеству S;
- ismember (А. S.' rows') – возвращает вектор, содержащий логические единицы там, где строки матрицы А являются также строками матрицы S, и логические нули в остальных позициях. А и S должны быть матрицами с одним числом столбцов.
Пример:
>
>
set
=
[
0
1
3
5
7
9
11
15
17
19
];
>
>
a
=
[
12345678
];
>
>
k
=
ismember(a.set)
k
=
1
0
1
0
1
0
1
0
- setdiff(a.b) – возвращает разность множеств, т. е., те элементы вектора а, которые не содержатся в векторе b. Результирующий вектор сортируется по возрастанию;
- setdiff(a,b, 'rows') – возвращает те строки из матрицы а, которые не содержатся в матрице b. Матрицы а и b должны иметь одинаковое число столбцов;
- [c,i] = setdiff(…) – возвращает также вектор индексов 1, такой что с = а(i) или с = а (i,;).
Если входной массив а является матрицей, то он расценивается как вектор-столбец а(:).
Пример:
>
>
a
=
[
2
3
5
7
8
9
10
13
20
];
>
>
b
=
[
1456894
]
>
>
c
=
setdiff(a.b)
c
=
2
3
7
10
13
20
- setxor(a.b) – исключающее ИЛИ для векторов а и b. Результирующий вектор отсортирован;
- setxor(a,b, 'rows') – возвращает строки, которые не являются пересечениями матриц а и b. Матрицы а и b должны иметь одинаковое число столбцов;
- [c.ia.ib] = setxor(…) – возвращает также векторы индексов ia и ib так, что с является отсортированной комбинацией элементов с = а(iа)ис = b(ib) или для комбинаций строк с = а(iа,:)ис = b(ib.;).
Если массив а является матрицей, то он расценивается как вектор-столбец а(:).
Пример:
>
>
a
=
[
-
1
0
1
Inf
-
Inf NaN];
>
>
b
=
[
-
2
pi
0
Inf];
>
>
c
=
setxor(a.b)
c
=
-
Inf
-
2.0000
-
1.00001.0000
3.1416
NaN
- union(a,b) – возвращает вектор объединенных значений из а и b без повторяющихся элементов. Результирующий вектор сортируется в порядке возрастания;
- union(a,b, 'rows') – возвращает объединенные строки из а и b, не содержащие повторений (а и b – это матрицы с одинаковым числом столбцов);
- [c.ia.ib] = unionL.) – дополнительно возвращает i а и i b – векторы индексов, такие что с = a(ia) и c=b(1b), или, для объединенных строк, с = а(1а.:)ис = b(ib,:). Невекторный массив а расценивается как вектор-столбец а(:). Пример:
>
>
a
=
[
2.4
,
-
4.9.0
]:b
=
[
2.5.4
]:
>
>
[c,ia,ib]
=
union(a,b)
c
=
-
4
0
2
4
5
9
ia
=
3
5
4
ib
=
1
3
2
- unique(a) – возвращает значения элементов из а, не содержащие повторений. Результирующий вектор сортируется в порядке возрастания. Невекторный массив расценивается как вектор-столбец а=а(:);
- unique(a, 'rows') – возвращает уникальные строки а;
- [b.i,j] = unique(…) – дополнительно возвращает i и j – векторы индексов, такие что b = a(i)na = b(j) (или b = а(1,:) иа = b(j.:)).
Примеры:
>
>
b
=
[
-
2.3.5.4.1
,
-
6.2.2.7
]
b
=
-
2
3
5
4
1
-
6
2
2
7
>
>
[c,i,j]
=
unique(b)
c
=
-
6
-
2
1
2
3
4
5
7
6
1
5
8
2
4
3
9
j
=
2
5
7
6
3
1
4
4
>
>
a
-
[
-
2
,
3.5
:
4
.
1
.
-
6
:
2.2.7
;
-
2.3.5
]
a
=
-
2
3
5
4
1
-
6
2
2
7
-
2
3
5
>
>
c
=
unique(
'arows'
)
c
=
-
2
3
5
2
2
7
4
1
-
6