Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Listas separadas por comas

¿Qué es una lista separada por comas?

Al introducir una serie de números separados por comas obtiene lo que se denomina una lista separada por comas. El software de MATLAB® devuelve cada valor de forma individual:

1,2,3
ans =

     1


ans =

     2


ans =

     3

Esta lista en sí misma no es muy útil. Pero cuando se utiliza junto a estructuras de datos grandes y complejas, como los arreglos de celdas y las estructuras de MATLAB, la lista separada por comas puede permitirle simplificar el código de MATLAB.

Generación de una lista separada por comas

En esta sección se describe cómo generar una lista separada por comas desde un arreglo de celdas o una estructura de MATLAB.

Generación de una lista desde un arreglo de celdas

La extracción de diferentes elementos de un arreglo de celdas produce una lista separada por comas. A partir del arreglo de celdas de 4 por 6 que se muestra a continuación,

C = cell(4,6);
for k = 1:24
    C{k} = k*2;
end
C
C = 

    [2]    [10]    [18]    [26]    [34]    [42]
    [4]    [12]    [20]    [28]    [36]    [44]
    [6]    [14]    [22]    [30]    [38]    [46]
    [8]    [16]    [24]    [32]    [40]    [48]

la extracción de la quinta columna genera la siguiente lista separada por comas:

C{:,5}
ans =

    34


ans =

    36


ans =

    38


ans =

    40

Es lo mismo que introducir directamente

C{1,5},C{2,5},C{3,5},C{4,5}

Generación de una lista desde una estructura

En las estructuras, la extracción de un campo de la estructura que existe en una de sus dimensiones produce una lista separada por comas.

Comience convirtiendo el arreglo de celdas que ha utilizado anteriormente en una estructura de 4 por 1 de MATLAB con seis campos: de f1 a f6. Lea el campo f5 de todas las filas y MATLAB devolverá una lista separada por comas:

S = cell2struct(C,{'f1','f2','f3','f4','f5','f6'},2);
S.f5
ans =

    34


ans =

    36


ans =

    38


ans =

    40

Es lo mismo que introducir directamente

S(1).f5,S(2).f5,S(3).f5,S(4).f5

Asignación de la salida de una lista separada por comas

Puede asignar cualquier elemento o todos los elementos consecutivos de una lista separada por comas a las variables con una simple instrucción de asignación. Utilizando el arreglo de celdas C de la sección anterior, asigna la primera fila a las variables c1-c6:

C = cell(4,6);
for k = 1:24
    C{k} = k*2;
end
[c1,c2,c3,c4,c5,c6] = C{1,1:6};
c5
c5 =

    34
Si especifica menos variables de salida que el número de salidas que devuelve la expresión, MATLAB asigna las primeras N salidas a las N variables y después descarta las salidas restantes. En este ejemplo, MATLAB asigna C{1,1:3} a las variables c1, c2 y c3 y después descarta C{1,4:6}:
[c1,c2,c3] = C{1,1:6};
Puede asignar salidas de estructura de la misma forma:
S = cell2struct(C,{'f1','f2','f3','f4','f5','f6'},2);
[sf1,sf2,sf3] = S.f5;
sf3
sf3 =

    38
También puede utilizar la función deal para este fin.

Asignación a una lista separada por comas

La forma más sencilla de asignar diferentes valores a una lista separada por comas es utilizar la función deal. Esta función distribuye todos sus argumentos de entrada a los elementos de una lista separada por comas.

Este ejemplo utiliza deal para sobrescribir cada elemento de una lista separada por comas. Primero, cree una lista.

c{1} = [31 07]; 
c{2} = [03 78];
c{:}
ans =

    31     7


ans =

     3    78

Utilice deal para sobrescribir cada elemento de la lista.

[c{:}] = deal([10 20],[14 12]);
c{:}
ans =

    10    20


ans =

    14    12

Este ejemplo realiza el mismo proceso que el anterior, pero con una lista separada por comas de vectores en un campo de estructura:

s(1).field1 = [31 07];
s(2).field1 = [03 78];
s.field1
ans =

    31     7


ans =

     3    78

Utilice deal para sobrescribir los campos de estructura.

[s.field1] = deal([10 20],[14 12]);
s.field1
ans =

    10    20


ans =

    14    12

Cómo utilizar las listas separadas por comas

Los usos más comunes de las listas separadas por comas son

Las siguientes secciones ofrecen ejemplos del uso de listas separadas por comas con arreglos de celdas. Estos ejemplos también se aplican a las estructuras de MATLAB.

Creación de arreglos

Puede utilizar una lista separada por comas para introducir un conjunto de elementos a la hora de crear una matriz o un arreglo. Observe la diferencia que se produce si inserta una lista de elementos frente a si añade una celda por sí sola.

Cuando especifica una lista de elementos con C{:, 5}, MATLAB inserta los cuatro elementos individuales:

A = {'Hello',C{:,5},magic(4)}
A = 

    'Hello'    [34]    [36]    [38]    [40]    [4x4 double]

Cuando especifica la celda C por sí sola, MATLAB inserta el arreglo de celdas completo:

A = {'Hello',C,magic(4)}
A = 

    'Hello'    {4x6 cell}    [4x4 double]

Visualización de arreglos

Utilice una lista para mostrar una parte o el todo de una estructura o un arreglo de celdas:

A{:}
ans =

Hello


ans = 

    [2]    [10]    [18]    [26]    [34]    [42]
    [4]    [12]    [20]    [28]    [36]    [44]
    [6]    [14]    [22]    [30]    [38]    [46]
    [8]    [16]    [24]    [32]    [40]    [48]


ans =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

Concatenación

Escribiendo una lista separada por comas entre corchetes, se extraen los elementos especificados de la lista y se concatenan:

A = [C{:,5:6}]
A =

    34    36    38    40    42    44    46    48

Argumentos de las llamadas a las funciones

A la hora de escribir el código de una llamada a una función, introduzca los argumentos de entrada como una lista con cada argumento separado por una coma. Si estos argumentos están almacenados en una estructura o un arreglo de celdas, puede generar la lista de argumentos al completo o una parte de ella desde la estructura o el arreglo de celdas en su lugar. Esto puede ser especialmente útil a la hora de transferir un número variable de argumentos.

En este ejemplo se transfieren diferentes argumentos de valor de atributo a la función plot:

X = -pi:pi/10:pi;
Y = tan(sin(X)) - sin(tan(X));
C = cell(2,3);
C{1,1} = 'LineWidth';
C{2,1} = 2;
C{1,2} = 'MarkerEdgeColor';
C{2,2} = 'k';
C{1,3} = 'MarkerFaceColor';
C{2,3} = 'g';
figure
plot(X,Y,'--rs',C{:})

Valores de retorno de las funciones

Las funciones de MATLAB también pueden devolver más de un valor al autor de la llamada. Estos valores se devuelven en una lista con cada valor separado por una coma. En lugar de enumerar cada valor de retorno, puede utilizar una lista separada por comas con una estructura o un arreglo de celdas. Esto es más útil para las acciones que tienen números variables de valores de retorno.

En este ejemplo se devuelven tres valores a un arreglo de celdas:

C = cell(1,3);
[C{:}] = fileparts('work/mytests/strArrays.mat')
C = 

    'work/mytests'    'strArrays'    '.mat'

Ejemplo de transformada rápida de Fourier

La función fftshift intercambia las mitades izquierda y derecha de cada dimensión de un arreglo. En un vector simple como [0 2 4 6 8 10], la salida sería [6 8 10 0 2 4]. En un arreglo multidimensional, fftshift realiza este intercambio en cada dimensión.

fftshift utiliza vectores de índices para realizar el intercambio. En el vector que se ha mostrado anteriormente, el índice [1 2 3 4 5 6] se reordena para formar un nuevo índice [4 5 6 1 2 3]. De este modo, la función utiliza este vector de índices para volver a posicionar los elementos. En un arreglo multidimensional, fftshift tiene que crear un vector de índices para cada dimensión. Una lista separada por comas hace que esta tarea sea mucho más sencilla.

A continuación se muestra la función fftshift:

function y = fftshift(x)
    numDims = ndims(x);
    idx = cell(1,numDims);
    for k = 1:numDims
        m = size(x,k);
        p = ceil(m/2);
        idx{k} = [p+1:m 1:p];
    end
    y = x(idx{:});
end

La función almacena los vectores de índices en el arreglo de celdas idx. Crear este arreglo de celdas es relativamente sencillo. En cada una de las dimensiones de N, determine el tamaño de dicha dimensión y busque el índice entero más cercano al punto intermedio. Posteriormente, cree un vector que intercambie las dos mitades de dicha dimensión.

Utilizando un arreglo de celdas para almacenar los vectores de índices y una lista separada por comas para la operación de indexado, fftshift desplaza los arreglos de cualquier dimensión con una única operación: y = x(idx{:}). Si fuera a utilizar el indexado explícito, tendría que escribir una instrucción if para cada dimensión que desea que gestione la función:

    if ndims(x) == 1
        y = x(index1);
    else if ndims(x) == 2
        y = x(index1,index2);
        end
    end

Otra forma de gestionar este proceso sin una lista separada por comas sería repetir el proceso en cada dimensión, convirtiendo una dimensión a la vez y moviendo los datos en cada ocasión. Con una lista separada por comas, solo tiene que mover los datos una vez. Una lista separada por comas facilita en gran medida la generalización de la operación de intercambio a un número arbitrario de dimensiones.