Функции обработки множеств
Множество – первичное понятие математики, не имеющее четкого определения. Под множеством подразумевается совокупность некоторых объектов, например книг в библиотеке, людей в зале или элементов вектора. В этом разделе приводятся некоторые функции для обработки множеств, представленных векторами. Они широко используются при анализе и обработке данных.
- 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 7ia =1 3 4 2ib =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 9ia =3 5 4ib =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 9j = 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