Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Основные функции > Операции с множествами > setdiff

setdiff

возвращает элементы или строк или столбцов массива, которые не принадлежат другому массиву

Синтаксис

v = setdiff(a, b)
v = setdiff(a, b, orien)
[v, ka] = setdiff(..)

Аргументы

a, b

векторы, матрицы или гиперматрицы вещественных чисел или кодированных целых чисел или строк. Оба должны иметь одинаковые типы данных (или типы целых чисел).

Если используется опция orien="r", то a и b должны иметь одинаковое количество столбцов. Если используется orien="c", то они должны иметь одинаковое количество строк.

orien
направленная обработка:
  • "r": строки из a ищутся среди строк в b.
  • "c": столбцы из a ищутся среди столбцов в b.
  • orien не указано: элементы из a ищутся среди элементов b.
v
  • сортированный вектор из компонентов a, которые отсутствуют в b.
  • orien="r": матрица строк из a, которые отсутствуют в b, отсортированный в лексикографическом порядке.
  • orien="c": матрица столбцов из a, которые отсутствуют в b, отсортированный в лексикографическом порядке.
ka

вектор линейный индексов выбранных элементов, строк, столбцов из a таких, что

  • v = a(ka) либо
  • v = a(ka,:) (orien="r") либо
  • v = a(:,ka) (orien="c")

Описание

setdiff(a, b,..) вычисляет и возвращает элементы либо строк либо столбцов из a которые ОТСУТСТВУЮТ в b.

Все дупликаты (элементы или строк или столбцов) удаляются из a и из b перед обработкой.

Если a - гиперматрица и используется опция "r", то перед обработкой a заменяется матрицей, состоящией из строк по всем своим более высоким размерностям. То же самое и в случае, если b является гиперматрицей. Если исползуется опция "c", то a или/и "b" заменяются соответствующими матрицами, состоящими из всех своих столбцов.

Формат результатов представлен в следующей таблице, в соответствии с формой a и опцией orien. Во всех случаях, если все элементы a находятся в b, возвращается [] для v как для ka:

orien → отсутствует "r" "c"
a ↓vkavkavka
строка cтрcтр cтрскал cтрcтр
столбец cтлбcтлб cтлбcтлб cтлбскал
матрица cтлбcтлб матрcтлб матрcтр
гиперматрица cтлбcтлб матрcтлб матрcтр
скаляр скалскал скалскал скалскал

v и ka становятся пустыми [], если a пуста (либо b), или все элементы a находятся в b.

Примеры

Пример №1:

a = grand(1, 10,"uin", 0, 9)
b = grand(2, 4, "uin", 0, 9)
[d, k] = setdiff(a, b);
d, k
--> a = grand(1, 10,"uin", 0, 9)
 a  =
   2.   2.   4.   5.   4.   1.   9.   5.   8.   3.
--> b = grand(2, 4, "uin", 0, 9)
 b  =
   5.   0.   9.   9.
   5.   6.   0.   4.
--> [d, k] = setdiff(a, b);
--> d, k
 d  =
   1.   2.   3.   8.
 k  =
   6.   1.   10.   9.
 

Пример №2: постолбцовая обработка

a = grand(2, 7,"uin", 0, 3)
b = grand(2, 10, "uin", 0, 3)
[d, k] = setdiff(a, b, "c");
d, k
--> a = grand(2, 7,"uin", 0, 3)
 a  =
   0.   1.   0.   2.   3.   0.   2.
   2.   2.   2.   1.   0.   1.   2.
--> b = grand(2, 10, "uin", 0, 3)
 b  =
   1.   1.   3.   1.   1.   1.   3.   0.   2.   0.
   3.   3.   2.   2.   0.   0.   1.   0.   1.   0.
--> [d, k] = setdiff(a, b, "c");
--> d, k
 d  =
   0.   0.   2.   3.
   1.   2.   2.   0.
 k  =
   6.   1.   7.   5.
 

Пример №3: с текстом

v1 = tokens("ab  ca  ba  bb  ca  cb  ba  aa  cc  bc  ac  aa")'
v2 = tokens("cc  ac  ca  bb  ac  bc  ab")'
[r, k] = setdiff(v1, v2);
r, k
--> v1 = tokens("ab  ca  ba  bb  ca  cb  ba  aa  cc  bc  ac  aa")'
 v1  =
!ab  ca  ac  bb  ca  cb  ba  aa  cc  bc  ac  aa  !
--> v2 = tokens("cc  ac  ca  bb  ac  bc  ab")'
 v2  =
!cc  ac  ca  bb  ac  bc  ab  !
--> [r, k] = setdiff(v1, v2);
--> r, k
 r  =
!aa  ba  cb  !
 k  =
   8.   3.   6.

Смотрите также

  • unique — удалить все повторяющиеся компоненты из вектора или матрицы
  • union — выделяет объединение компонентов векторов
  • members — count (and locate) in an array each element or row or column of another array
  • vectorfind — ищет в строках или столбцах матриц совпадения с вектором

История

ВерсияОписание
< 5.0 Функция введена.
6.0.2 Добавлены опции "r" | "c", включая гиперматрицы.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Feb 14 15:04:55 CET 2019