Contenido principal

ismember

Encontrar miembros de conjuntos de datos

Descripción

Lia = ismember(A,B) devuelve un arreglo que contiene 1 (true) lógico, donde los datos de A se encuentran en B. En los demás lugares, el arreglo contiene 0 (false) lógico.

  • Si A y B son tablas u horarios, ismember devuelve un valor lógico para cada fila. Para horarios, ismember tiene en cuenta las horas de las filas para determinar la igualdad. La salida, Lia, es un vector columna.

ejemplo

Lia = ismember(A,B,"rows") trata cada fila de A y cada fila de B como entidades únicas y devuelve un vector columna que contiene 1 (true) lógico, donde las filas de A también son filas de B. En los demás lugares, el arreglo contiene 0 (false) lógico.

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.

[Lia,Locb] = ismember(___) también devuelve un arreglo, Locb, usando cualquiera de las sintaxis anteriores.

  • Por lo general, Locb contiene el índice más bajo de B para cada valor de A que sea un miembro de B. Los valores de 0 indican cuándo A no es un miembro de B.

  • Si se especifica la opción "rows", Locb contiene el índice más bajo de B para cada fila de A que sea también una fila de B. Los valores de 0 indican cuándo A no es una fila de B.

  • Si A y B son tablas u horarios, Locb contiene el índice más bajo de B para cada fila de A que sea también una fila de B. Los valores de 0 indican cuándo A no es una fila de B.

ejemplo

[Lia,Locb] = ismember(___,"legacy") conserva el comportamiento de la función ismember de la versión R2012b y anteriores con cualquiera de los argumentos de entrada de sintaxis 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 con valores en común.

A = [5 3 4 2]; 
B = [2 4 4 4 6 8];

Determine qué elementos de A también están en B.

Lia = ismember(A,B)
Lia = 1×4 logical array

   0   0   1   1

A(3) y A(4) se encuentran en B.

Cree dos tablas con filas en común.

A = table([1:5]',["red";"green";"blue";"cyan";"magenta"],logical([0;1;0;1;0]))
A=5×3 table
    Var1      Var2       Var3 
    ____    _________    _____

     1      "red"        false
     2      "green"      true 
     3      "blue"       false
     4      "cyan"       true 
     5      "magenta"    false

B = table([1:2:10]',["red";"blue";"magenta";"yellow";"black"],logical(zeros(5,1)))
B=5×3 table
    Var1      Var2       Var3 
    ____    _________    _____

     1      "red"        false
     3      "blue"       false
     5      "magenta"    false
     7      "yellow"     false
     9      "black"      false

Determine qué filas de A también están en B.

Lia = ismember(A,B)
Lia = 5×1 logical array

   1
   0
   1
   0
   1

Las filas A(1,:), A(3,:) y A(5,:) se encuentran en B.

Cree dos vectores con valores en común.

A = [5 3 4 2]; 
B = [2 4 4 4 6 8];

Determine qué elementos de A también están en B, así como sus correspondientes ubicaciones en B.

[Lia,Locb] = ismember(A,B)
Lia = 1×4 logical array

   0   0   1   1

Locb = 1×4

     0     0     2     1

El índice más bajo de A(3) es B(2) y A(4) se encuentra en B(1).

Cree un vector x. Obtenga un segundo vector y transformando y destransformando x. Esta transformación introduce diferencias de redondeo en y.

x = (1:6)'*pi;
y = 10.^log10(x);

Compruebe que x e y no son idénticos obteniendo la diferencia.

x-y
ans = 6×1
10-14 ×

    0.0444
         0
         0
         0
         0
   -0.3553

Utilice ismember para encontrar los elementos de x que se encuentren en y. La función ismember realiza comparaciones exactas y determina que algunos de los elementos de matriz de x no son miembros de y.

lia = ismember(x,y)
lia = 6×1 logical array

   0
   1
   1
   1
   1
   0

Utilice ismembertol para realizar la comparación con una tolerancia pequeña. ismembertol trata como iguales los elementos que están dentro de la tolerancia y determina que todos los elementos de x son miembros de y.

LIA = ismembertol(x,y)
LIA = 6×1 logical array

   1
   1
   1
   1
   1
   1

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

A = table([true;true;false;true;false],[27;52;31;46;35],[74;68;64;61;64],...
VariableNames=["Smoker" "Age" "Height"],...
RowNames=["Sanchez" "Johnson" "Li" "Diaz" "Brown"])
A=5×3 table
               Smoker    Age    Height
               ______    ___    ______

    Sanchez    true      27       74  
    Johnson    true      52       68  
    Li         false     31       64  
    Diaz       true      46       61  
    Brown      false     35       64  

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

B = table([false;false;false;false],[47;31;35;23],[68;64;62;58],...
VariableNames=["Smoker" "Age" "Height"],...
RowNames=["Nguyen" "Cohen" "Jones" "Garcia"])
B=4×3 table
              Smoker    Age    Height
              ______    ___    ______

    Nguyen    false     47       68  
    Cohen     false     31       64  
    Jones     false     35       62  
    Garcia    false     23       58  

Determine qué filas de A también están en B, así como sus correspondientes ubicaciones en B.

[Lia,Locb] = ismember(A,B)
Lia = 5×1 logical array

   0
   0
   1
   0
   0

Locb = 5×1

     0
     0
     2
     0
     0

Dos filas de tabla que tienen los mismos valores, pero nombres de fila diferentes, se consideran iguales. Los mismos datos para Li se encuentran en B(2,:), que corresponde a Cohen.

Cree dos matrices con una fila en común.

A = [1 3 5 6; 2 4 6 8];
B = [2 4 6 8; 1 3 5 7; 2 4 6 8];

Determine qué filas de A también están en B, así como sus correspondientes ubicaciones en B.

[Lia, Locb] = ismember(A,B,"rows")
Lia = 2×1 logical array

   0
   1

Locb = 2×1

     0
     1

El índice más bajo de A(2,:) es B(1,:).

Cree dos vectores que contengan NaN.

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

Determine qué elementos de A también están en B, así como sus correspondientes ubicaciones en B.

[Lia,Locb] = ismember(A,B)
Lia = 1×3 logical array

   1   0   0

Locb = 1×3

     1     0     0

ismember trata los valores NaN como distintos.

Cree un arreglo de cadenas, A.

A = ["dog","cat","fish","horse"];

Cree otro arreglo de cadenas, B, donde algunos elementos tengan un espacio en blanco final.

B = ["dog ","cat","fish ","horse"];

Determine qué cadenas de A también están en B.

[Lia,Locb] = ismember(A,B)
Lia = 1×4 logical array

   0   1   0   1

Locb = 1×4

     0     2     0     4

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

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

Encuentre los miembros de B con el comportamiento actual.

A = [5 3 4 2]; 
B = [2 4 4 4 6 8];
[Lia1,Locb1] = ismember(A,B)
Lia1 = 1×4 logical array

   0   0   1   1

Locb1 = 1×4

     0     0     2     1

Encuentre los miembros de B y conserve el comportamiento heredado.

[Lia2,Locb2] = ismember(A,B,"legacy")
Lia2 = 1×4 logical array

   0   0   1   1

Locb2 = 1×4

     0     0     4     1

Argumentos de entrada

contraer todo

Arreglo de consulta, especificado como arreglo, tabla u horario. Si especifica la opción "rows", A y B deben tener el mismo número de columnas.

A debe pertenecer a la misma clase que B 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 arreglos de cadenas, vectores de caracteres y arreglos de celdas de 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 es un arreglo categórico, B puede ser un arreglo categórico, un arreglo de cadenas, un vector de caracteres o un arreglo de celdas de vectores de caracteres. En este caso, la segunda entrada B es un conjunto de nombres de categorías.

  • 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.

  • Si A es una tabla o un horario, debe tener los mismos nombres de variables que B (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 también puede ser un objeto con los siguientes métodos de clase:

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

  • eq

  • 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 puede ser un arreglo de identificadores de objetos de gráficas.

Arreglo de conjunto, especificado como arreglo, tabla u horario. Si especifica la opción "rows", A y B deben tener el mismo número de columnas.

B debe pertenecer a la misma clase que A 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 arreglos de cadenas, vectores de caracteres y arreglos de celdas de 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 es un arreglo categórico, B puede ser un arreglo categórico, un arreglo de cadenas, un vector de caracteres o un arreglo de celdas de vectores de caracteres. En este caso, la segunda entrada B es un conjunto de nombres de categorías.

  • 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.

  • Si A es una tabla o un horario, debe tener los mismos nombres de variables que B (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.

B también puede ser un objeto con los siguientes métodos de clase:

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

  • eq

  • 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, B puede ser un arreglo de identificadores de objetos de gráficas.

Argumentos de salida

contraer todo

Índice lógico de A, devuelto como vector, matriz o arreglo ND que contiene 1 (true) lógico cuando los valores (o filas) de A son miembros de B. En los demás lugares, contiene 0 (false) lógico.

Lia es un arreglo del mismo tamaño que A, a menos que especifique el indicador "rows".

Si el indicador "rows" está especificado o si A es una tabla u horario, Lia es un vector columna con el mismo número de filas que A.

Ubicaciones en B, devueltas como vector, matriz o arreglo ND. Si el indicador "legacy" no está especificado, Locb contiene los índices más bajos de los valores (o filas) de B que se encuentran en A. Los valores de 0 indican cuándo A no es un miembro de B.

Locb es un arreglo del mismo tamaño que A, a menos que especifique el indicador "rows".

Si el indicador "rows" está especificado o si A es una tabla u horario, Locb es un vector columna con el mismo número de filas que A.

Sugerencias

  • Use ismembertol para realizar comparaciones entre números de punto flotante usando una tolerancia.

  • Para encontrar las filas de la tabla u horario A que sen encuentran en B con respecto a un subconjunto de variables, puede utilizar subíndices de columna. Por ejemplo, puede utilizar ismember(A(:,vars),B(:,vars)), donde vars es un entero positivo, un vector de enteros positivos, un nombre de variable, un arreglo de cadenas o 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

Historial de versiones

Introducido antes de R2006a

Consulte también

| | | | | | |