Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.1.0 - Русский


setdiff

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

Синтаксис

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

Аргументы

a, b

векторы, матрицы или гиперматрицы действительных или комплексных чисел, закодированные целые числа, логические значения или строки. Допускаются закодированные разрежённые входные данные. Как a так и b должны иметь одинаковые типы данных (или типы целых чисел), но можно смешивать плотные и разрежённые.

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

orien
направленная обработка:
  • "r": строки из a ищутся среди строк в b.
  • "c": столбцы из a ищутся среди столбцов в b.
  • orien не указано: элементы из a ищутся среди элементов b.
v
Массив с типом данных как у a и кодированный:
  • сортированный вектор из компонентов 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.

Для логических значений, setdiff(…) полезна главным образом с опциями "r" или "c".

Примеры

Пример №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", включая гиперматрицы.
6.1.0 Теперь допускаются комплексные числа.
6.1.1 Теперь допускаются логические и разрежённые (логические или числовые) входные данные.
Report an issue
<< intersect Операции с множествами union >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon May 22 12:41:12 CEST 2023