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


intersect

элементы, либо строки либо столбцы, имеющиеся в обоих входных массивах, без повторов

Синтаксис

M = intersect(a, b)
M = intersect(a, b, orient)
[M, ka] = intersect(..)
[M, ka, kb] = intersect(..)

Аргументы

a, b
векторы, матрицы или гиперматрицы логических значений, кодированных целых чисел, вещественных или комплексных чисел, или текста. a и b должны иметь одинаковый тип данных. Для текстовых входных данных принимаются символы UTF. Принимаются разреженные числовые или логические матрицы: либо a либо b либо как a, так и b могут быть разрежёнными.

orient
флаг с возможными значениями: 1 или "r", 2 или "c". Не может использоваться, если a или/и b являются гиперматрицами.

M

матрица того же типа данных, что и a и b.

  • Без orient: M является вектором-строкой.
  • С orient="r"|1: M является матрицей, накапливающей общие строки a и b.
  • С orient="c"|2: M является матрицей, накапливающей общие столбцы a и b.

M является разрежённой, если либо a или b являются разрежёнными и ни одна не является пустой.

ka
Плотный вектор-строка индексов в a.

kb
Плотный вектор-строка индексов в b.

Описание

intersect(a,b) возвращает вектор-строку уникальных значений, присутствующих как в массиве a так и в массиве b. Значения отсортированы в порядке возрастания

  • для комплексных чисел: сначала в порядке возрастания амплитуды, затем в порядке возрастания фазы;
  • для текстов: в алфавитном порядке.

Два элемента NaN всегда считаются разными. Так, NaN или строки или столбцы, имеющие NaN, никогда не окажутся в результирующей M.

[M, ka, kb] = intersect(a,b) дополнительно возвращает векторы индексов ka и kb в a и в b выбранных компонентов, первых попавшихся так, что M=a(ka) и M=b(kb).

Общие строки или столбцы

Когда указан аргумент orient, сравнение выполняется между строками a и b -- каждая из которых рассматривается как целое --, или между их столбцами.

intersect(a,b,"r") или intersect(a,b,1) будет возвращать матрицу накопленных неповторяющихся строк, встреченных как в a, так и в b, сортированных в лексикографическом порядке возрастания. Если a и b не имеют одинаковое количество столбцов, то будет возвращено [] без сравнения величин.

[M,ka,kb] = intersect(a,b,"r") дополнительно возвращает векторы ka и kb минимальных индексов общих строк, соответственно в a и b, так что M=a(ka,:) и M=b(kb,:).

intersect(a,b,"c") или intersect(a,b,2) делает то же самое, но для столбцов.

Примеры

A = grand(3, 3, "uin", 0, 9)
B = grand(2, 4, "uin", 0, 9)
intersect(A, B)
[N, ka, kb] = intersect(A,B);
ka, kb
--> A = grand(3, 3, "uin", 0, 9)
 A  =
   0.   6.   4.
   6.   6.   6.
   2.   7.   9.

--> B = grand(2, 4, "uin", 0, 9)
 B  =
   1.   8.   0.   2.
   6.   2.   2.   1.

--> intersect(A, B)
 ans  =
   0.   2.   6.

--> [N, ka, kb] = intersect(A,B);
--> ka, kb
 ka  =
   1.   3.   2.
 kb  =
   5.   4.   2.

В вышеприведённом примере обратите внимание, что 6 встречена четыре раза в A с индексами [2 4 5 8]. Только минимальный индекс 2 возвращается в ka. Та же ситуация для 2 в B.

Значения NaN никогда не могут быть в результате:

%nan == %nan
intersect([1 -2 %nan 3 6], [%nan 1:3])
--> %nan == %nan
 ans  =
  F

--> intersect([1 -2 %nan 3 6], [%nan 1:3])
 ans  =
   1.   3.

intersect() может также обрабатывать некоторые символы или тексты. Поскольку Scilab превосходно работает с символами UTF, то здесь пример с некоторым арабским содержимым, получающим символы, присутствующими в обоих предложениях:

A = strsplit("هو برنامج علمي كبير ""Scilab""")'
B = strsplit("فهو حر ومفتوح")'
intersect(A,B)
--> A = strsplit("هو برنامج علمي كبير ""Scilab""")'
 A  =
!ه  و     ب  ر  ن  ا  م  ج     ع  ل  م  ي     ك  ب  ي  ر     "  S  c  i  l  a  b  "  !

--> B = strsplit("فهو حر ومفتوح")'
 B  =
!ف  ه  و     ح  ر     و  م  ف  ت  و  ح  !

--> intersect(A,B)
 ans  =
!   ر  م  ه  و  !

Постолбцовая или построковая обработка двух матриц: здесь мы обрабатываем 2 матрицы знаковых 1-битных целых и получаем общие столбцы:

A = int8(grand(3,5,"uin",0,1))
B = int8(grand(3,9,"uin",0,1))
[M,ka,kb] = intersect(A, B, "c");
M, ka, kb
--> A = int8(grand(3,5,"uin",0,1))
 A  =
  0  0  1  1  1
  0  0  1  1  0
  0  0  0  0  1

--> B = int8(grand(3,9,"uin",0,1))
 B  =
  1  0  1  1  1  0  1  1  1
  1  0  0  1  1  1  0  0  0
  1  0  1  0  1  1  1  0  0

--> [M,ka,kb] = intersect(A, B, "c");
--> M, ka, kb
 M  =
  0  1  1
  0  0  1
  0  1  0

 ka  =
   1.   5.   3.

 kb  =
   2.   3.   4.

intersect() для логических значений главным образом полезны с опцией "r" или "c". Здесь пример с разрежённой матрицей логических значений:

[F, T] = (%f, %t);
A = [F F T F T F ; T F F T T T ; T T F T F F]
B = [F T F T F F ; T F F F T F ; F T F F T F]
[M,ka,kb] = intersect(A, sparse(B), "c");
issparse(M), full(M), ka, kb
--> A = [F F T F T F ; T F F T T T ; T T F T F F]
 A  =
  F F T F T F
  T F F T T T
  T T F T F F

--> B = [F T F T F F ; T F F F T F ; F T F F T F]
 B  =
  F T F T F F
  T F F F T F
  F T F F T F

--> [M,ka,kb] = intersect(A, sparse(B), "c");
--> issparse(M), full(M), ka, kb
 ans  =
  T

 ans  =
  F F T
  T T F
  F T F

 ka  =
   6.   1.   3.

 kb  =
   1.   5.   4.

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

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

История

ВерсияОписание
6.1.0 Теперь принимаются комплексные числа.
6.1.1 Теперь принимаются разрежённые матрицы (числовые или логические значения).
Report an issue
<< Операции с множествами Операции с множествами setdiff >>

Copyright (c) 2022-2023 (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:
Tue Mar 07 09:28:42 CET 2023