Contenido principal

intersect

Intersección de dos conjuntos de datos

Descripción

C = intersect(A,B) devuelve los datos comunes a A y B, sin repeticiones. C está ordenada.

  • Si A y B son tablas u horarios, intersect devuelve el conjunto de filas común a ambas tablas. Para horarios, intersect tiene en cuenta las horas de las filas para determinar la igualdad y ordena el horario de salida C según las horas de las filas.

ejemplo

C = intersect(A,B,setOrder) devuelve C en un orden específico. setOrder puede ser 'sorted' o 'stable'.

ejemplo

C = intersect(A,B,___,'rows') y C = intersect(A,B,'rows',___) tratan cada fila de A y cada fila de B como entidades únicas y devuelven las filas comunes a A y B, sin repeticiones. Debe especificar A y B, y, de manera opcional, puede especificar setOrder.

La opción 'rows' no es compatible con arreglos de celdas, a menos que una de las entradas sea un arreglo categórico o un arreglo de fecha/hora.

[C,ia,ib] = intersect(___) también devuelve vectores de índices ia e ib mediante cualquiera de las sintaxis anteriores.

  • Normalmente, C = A(ia) y C = B(ib).

  • Si se especifica la opción 'rows', C = A(ia,:) y C = B(ib,:).

  • Si A y B son tablas u horarios, C = A(ia,:) y C = B(ib,:).

ejemplo

[C,ia,ib] = intersect(A,B,'legacy') y [C,ia,ib] = intersect(A,B,'rows','legacy') conservan el comportamiento de la función intersect de la versión R2012b y anteriores.

La opción 'legacy' no es compatible con arreglos categóricos, arreglos de fecha/hora, arreglos de duración, tablas u horarios.

ejemplo

Ejemplos

contraer todo

Cree dos vectores que tengan algunos valores en común.

A = [7 1 7 7 4]; 
B = [7 0 4 4 0];

Encuentre los valores comunes a A y B.

C = intersect(A,B)
C = 1×2

     4     7

Cree dos tablas con filas en común.

A = table([1:5]',categorical({'A';'B';'C';'D';'E'}),logical([0;1;0;1;0]))
A=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     2       B      true 
     3       C      false
     4       D      true 
     5       E      false

B = table([1:2:10]',categorical({'A';'C';'E';'G';'I'}),logical(zeros(5,1)))
B=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     3       C      false
     5       E      false
     7       G      false
     9       I      false

Encuentre las filas comunes a A y B.

C = intersect(A,B)
C=3×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     3       C      false
     5       E      false

Cree dos vectores con valores en común.

A = [7 1 7 7 4]; 
B = [7 0 4 4 0];

Encuentre los valores comunes a A y B, así como los vectores índice ia e ib, de forma que C = A(ia) y C = B(ib).

[C,ia,ib] = intersect(A,B)
C = 1×2

     4     7

ia = 2×1

     5
     1

ib = 2×1

     3
     1

Cree una tabla, A, con el sexo, la edad y la altura de cinco personas.

A = table(categorical({'M';'M';'F';'M';'F'}),...
[27;52;31;46;35],[74;68;64;61;64],...
'VariableNames',{'Gender' 'Age' 'Height'},...
'RowNames',{'Ted' 'Fred' 'Betty' 'Bob' 'Judy'})
A=5×3 table
             Gender    Age    Height
             ______    ___    ______

    Ted        M       27       74  
    Fred       M       52       68  
    Betty      F       31       64  
    Bob        M       46       61  
    Judy       F       35       64  

Cree una tabla, B, con filas en común con A.

B = table(categorical({'F';'M';'F';'F'}),...
[31;47;35;23],[64;68;62;58],...
'VariableNames',{'Gender' 'Age' 'Height'},...
'RowNames',{'Meg' 'Joe' 'Beth' 'Amy'})
B=4×3 table
            Gender    Age    Height
            ______    ___    ______

    Meg       F       31       64  
    Joe       M       47       68  
    Beth      F       35       62  
    Amy       F       23       58  

Encuentre las filas comunes a A y B, así como los vectores índice ia e ib, de forma que C = A(ia,:) y C = B(ib,:).

[C,ia,ib] = intersect(A,B)
C=1×3 table
             Gender    Age    Height
             ______    ___    ______

    Betty      F       31       64  

ia = 
3
ib = 
1

Dos filas que tienen los mismos valores, pero nombres diferentes, se consideran iguales. Por lo tanto, descubrimos que Betty, A(3,:), y Meg, B(1,:) tienen el mismo sexo, edad y altura.

Cree dos matrices con filas en común.

A = [2 2 2; 0 0 1; 1 2 3; 1 1 1];
B = [1 2 3; 2 2 2; 2 2 0];

Encuentre las filas comunes a A y B, así como los vectores índice ia e ib, de forma que C = A(ia,:) y C = B(ib,:).

[C,ia,ib] = intersect(A,B,'rows')
C = 2×3

     1     2     3
     2     2     2

ia = 2×1

     3
     1

ib = 2×1

     1
     2

No es necesario que A y B tengan el mismo número de filas, pero deben tener el mismo número de columnas.

Utilice el argumento setOrder para especificar el orden de los valores de C.

Especifique 'stable' si desea que los valores de C tengan el mismo orden que en A.

A = [7 1 7 7 4]; B = [7 0 4 4 0];
[C,ia,ib] = intersect(A,B,'stable')
C = 1×2

     7     4

ia = 2×1

     1
     5

ib = 2×1

     1
     3

También puede especificar el orden 'sorted'.

[C,ia,ib] = intersect(A,B,'sorted')
C = 1×2

     4     7

ia = 2×1

     5
     1

ib = 2×1

     3
     1

Cree dos vectores que contengan NaN.

A = [5 NaN NaN]; 
B = [5 NaN NaN];

Encuentre los valores comunes a A y B.

C = intersect(A,B)
C = 
5

intersect trata los valores NaN como distintos.

Cree un arreglo de celdas de vectores de caracteres, A.

A = {'dog','cat','fish','horse'};

Cree un arreglo de celdas de vectores de caracteres, B, donde algunos de los vectores tengan un espacio en blanco final.

B = {'dog ','cat','fish ','horse'};

Encuentre los vectores de caracteres comunes a A y B.

[C,ia,ib] = intersect(A,B)
C = 1×2 cell
    {'cat'}    {'horse'}

ia = 2×1

     2
     4

ib = 2×1

     2
     4

intersect trata el espacio en blanco final de los arreglos de celdas de vectores de caracteres como un carácter distinto.

Cree un arreglo de caracteres como vector columna.

A = ['A';'B';'C'], class(A)
A = 3×1 char array
    'A'
    'B'
    'C'

ans = 
'char'

Cree una matriz de 2 por 3 que contenga elementos de tipo numérico double.

B = [65 66 67;68 69 70], class(B)
B = 2×3

    65    66    67
    68    69    70

ans = 
'double'

Encuentre los valores comunes a A y B.

[C,ia,ib] = intersect(A,B)
C = 3×1 char array
    'A'
    'B'
    'C'

ia = 3×1

     1
     2
     3

ib = 3×1

     1
     3
     5

intersect interpreta B como un arreglo de caracteres y devuelve un arreglo de caracteres, C.

class(C)
ans = 
'char'

Cree un vector de caracteres que contenga nombres de animales con tres letras.

A = ['dog';'cat';'fox';'pig'];
class(A)
ans = 
'char'

Cree un arreglo de celdas de vectores de caracteres que contenga nombres de animales de diversa longitud.

B = {'cat','dog','fish','horse'};
class(B)
ans = 
'cell'

Encuentre los vectores de caracteres comunes a A y B.

C = intersect(A,B)
C = 2×1 cell
    {'cat'}
    {'dog'}

El resultado, C, es un arreglo de celdas de vectores de caracteres.

class(C)
ans = 
'cell'

Use el indicador 'legacy' para conservar el comportamiento de intersect de la versión R2012b y anteriores en su código.

Encuentre la intersección de A y B con el comportamiento actual.

A = [7 1 7 7 4]; 
B = [7 0 4 4 0];
[C1,ia1,ib1] = intersect(A,B)
C1 = 1×2

     4     7

ia1 = 2×1

     5
     1

ib1 = 2×1

     3
     1

Encuentre los elementos únicos de A y conserve el comportamiento heredado.

[C2,ia2,ib2] = intersect(A,B,'legacy')
C2 = 1×2

     4     7

ia2 = 1×2

     5     4

ib2 = 1×2

     4     1

Argumentos de entrada

contraer todo

Arreglos de entrada. Si especifica la opción 'rows', A y B deben tener el mismo número de columnas.

A y B deben pertenecer a la misma clase con las siguientes excepciones:

  • logical, char y todas las clases numéricas pueden combinarse con arreglos double.

  • Los arreglos de cadenas pueden combinarse con vectores de caracteres y arreglos de celdas de vectores de caracteres.

  • Los arreglos categóricos pueden combinarse con escalares de cadena y vectores de caracteres.

  • Los arreglos de fecha/hora y de duración pueden combinarse con escalares de cadena y vectores de caracteres con formato para representar fechas y horas.

Existen requisitos adicionales para A y B en función del tipo de datos:

  • Si A y B son arreglos categóricos ordinales, deben tener los mismos conjuntos de categorías, incluyendo su orden. Si ni A ni B son ordinales, no es necesario que tengan los mismos conjuntos de categorías y la comparación se realiza con nombres de categorías. En este caso, las categorías de C constan de las categorías de A seguidas por las categorías de B que no están en A. Las categorías están en el mismo orden que en A y B, y el orden de las categorías se usa para ordenar C.

  • Si A y B son tablas u horarios, deben tener los mismos nombres de variables (pero no el mismo orden). Para las tablas, los nombres de fila se ignoran, por lo que dos filas que tienen los mismos valores, pero nombres diferentes, se consideran iguales. Para los horarios, las horas de las filas se tienen en cuenta, por lo que dos filas que tienen los mismos valores, pero horas diferentes, no se consideran iguales.

  • Si A y B son arreglos de fecha/hora, ambos arreglos deben especificar zonas horarias o no tener zonas.

A y B también pueden ser objetos con los siguientes métodos de clase:

  • sort (o sortrows para la opción 'rows')

  • ne

Los métodos de las clases de los objetos deben ser coherentes entre sí. Estos objetos incluyen arreglos heterogéneos derivados de la misma clase raíz. Por ejemplo, A y B pueden ser arreglos de identificadores de objetos de gráficas.

Indicador de orden, especificado como 'sorted' o 'stable', indica el orden de los valores (o filas) de C.

IndicadorDescripción
'sorted'

Los valores (o filas) de C se devuelven en orden tal y como los devuelve sort.

Ejemplo

C = intersect([7 0 1 5],[0 2 7 5],'sorted')
C =

     0     5     7

'stable'

Los valores (o filas) de C vuelven en el mismo orden en el que aparecen en A.

Ejemplo

C = intersect([7 0 1 5],[0 2 7 5],'stable')
C =

     7     0     5

Tipos de datos: char | string

Argumentos de salida

contraer todo

Datos comunes a A y B, devueltos como vector, matriz o tabla. Si las entradas A y B son tablas u horarios, el orden de las variables en C es el mismo que el orden de las variables en A.

A continuación, se describe la forma de C cuando las entradas son vectores o matrices y cuando el indicador 'legacy' no está especificado:

  • Si no se especifica el indicador 'rows', C es un vector columna a menos que tanto A como B sean vectores fila, en cuyo caso C es un vector fila.

  • Si se especifica el indicador 'rows', C es una matriz que contiene las filas en común de A y B.

La clase de las entradas A y B determina la clase de C:

  • Si las clases de A y B son iguales, C es de la misma clase.

  • Si combina una clase char o una clase numérica no doble con double, C es de la misma clase que la entrada no doble.

  • Si combina una clase logical con double, C es double.

  • Si combina un arreglo de celdas de vectores de caracteres con char, C es un arreglo de celdas de vectores de caracteres.

  • Si combina un arreglo categórico con un vector de caracteres, un arreglo de celdas de vectores de caracteres o una cadena, C es un arreglo categórico.

  • Si combina un arreglo de fecha/hora con un arreglo de celdas de vectores de caracteres de fecha o un único vector de caracteres de fecha, C es un arreglo de fecha/hora.

  • Si combina un arreglo de cadenas con un vector de caracteres o un arreglo de celdas de vectores de caracteres, C es un arreglo de cadenas.

Índice a A, devuelto como un vector columna cuando no se especifica el indicador 'legacy'. ia identifica los valores (o filas) de A que son comunes a B. Si hay un valor (o fila) repetido en A, ia contiene el índice de la primera aparición del valor (o fila).

Índice a B, devuelto como un vector columna cuando no se especifica el indicador 'legacy'. ib identifica los valores (o filas) de B que son comunes a A. Si hay un valor (o fila) repetido en B, ib contiene el índice de la primera aparición del valor (o fila).

Sugerencias

  • Para encontrar la intersección con respecto a un subconjunto de variables de una tabla u horario, puede utilizar el subíndice de columna. Por ejemplo, puede utilizar intersect(A(:,vars),B(:,vars)), donde vars es un entero positivo, un vector de enteros positivos, un nombre de variable, un arreglo de celdas de nombres de variables o un vector lógico. También puede utilizar vartype para crear un subíndice que seleccione variables de un tipo especificado.

Capacidades ampliadas

expandir todo

Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool o acelere código con Parallel Computing Toolbox™ ThreadPool.

Historial de versiones

Introducido antes de R2006a