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?

Teclear una serie de números separados por comas le da lo que se llama un lista separada por comas. El software MATLAB® devuelve cada valor individualmente:

1,2,3 
ans =       1   ans =       2   ans =       3 

Esa lista, por sí sola, no es muy útil. Pero cuando se utiliza con estructuras de datos grandes y más complejas como estructuras MATLAB y matrices de celdas, la lista separada por comas puede permitirle simplificar su código MATLAB.

Generación de una lista separada por comas

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

Generar una lista a partir de una matriz de celdas

La extracción de varios elementos de una matriz de celdas produce una lista separada por comas. Dado un arreglo de celdas de 4 por 6 como se muestra aquí

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 

Esto es lo mismo que escribir explícitamente

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

Generar una lista a partir de una estructura

Para 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 por convertir la matriz de celdas utilizada anteriormente en una estructura MATLAB de 4 por 1 con seis campos: f1 a través de f6. f5 de campo de lectura para todas las filas y MATLAB devuelve 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 

Esto es lo mismo que escribir explícitamente

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

Asignación de resultados desde una lista separada por comas

Puede asignar cualquiera o todos los elementos consecutivos de una lista separada por comas a variables con una instrucción de asignación simple. Utilizando la matriz de celdas C de la sección anterior, asigne la primera fila a las variables c1 a través de 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 devueltas por la expresión, MATLAB asigna el primero n salidas a las variables n y, a continuación, descarta las salidas restantes. En este siguiente ejemplo, MATLAB asigna C{1,1:3} a las variables c1, c2 y c3 y, a continuación, descarta C{1,4:6}:
[c1,c2,c3] = C{1,1:6};
puede asignar las salidas de estructura de la misma manera:
S = cell2struct(C,{'f1','f2','f3','f4','f5','f6'},2); [sf1,sf2,sf3] = S.f5; sf3 
sf3 =      38 
también puede utilizar el deal función para este propósito.

Asignar a una lista separada por comas

La forma más sencilla de asignar varios 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.

En este ejemplo se utiliza deal para sobrescribir cada elemento en una lista separada por comas. Primero crea 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 hace lo mismo que el anterior, pero con una lista de vectores separada por comas 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 comunes de las listas separadas por comas son

Las secciones siguientes proporcionan ejemplos de la utilización de listas separadas por comas con matrices de celdas. Cada uno de estos ejemplos se aplica también a las estructuras MATLAB.

Construyendo matrices

Puede utilizar una lista separada por comas para introducir una serie de elementos al construir una matriz o un array. Note lo que sucede cuando se inserta un lista de elementos en lugar de añadir la propia celda.

Cuando se 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 se especifica la celda C en sí, MATLAB inserta toda la matriz de celdas:

A = {'Hello',C,magic(4)} 
A =       'Hello'    {4x6 cell}    [4x4 double] 

Mostrar matrices

Utilice una lista para mostrar todo o parte de una estructura o matriz 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

Al colocar una lista separada por comas dentro de 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 llamada de función

Al escribir el código para una llamada de función, se introducen los argumentos de entrada como una lista con cada argumento separado por una coma. Si tiene estos argumentos almacenados en una estructura o matriz de celdas, puede generar toda o parte de la lista de argumentos de la estructura o de la matriz de celdas en su lugar. Esto puede ser especialmente útil cuando se pasa en números variables de argumentos.

Este ejemplo pasa varios 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 devueltos de función

las funciones MATLAB también pueden devolver más de un valor al llamador. Estos valores se devuelven en una lista con cada valor separado por una coma. En lugar de enumerar cada valor devuelto, puede utilizar una lista separada por comas con una estructura o una matriz de celdas. Esto resulta más útil para aquellas funciones que tienen un número variable de valores devueltos.

Este ejemplo devuelve tres valores a una matriz de celdas:

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

Ejemplo de transformación rápida de Fourier

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

fftshift utiliza vectores de índices para realizar el swap. Para el vector que se muestra arriba, el índice [1 2 3 4 5 6] se reorganiza para formar un nuevo índice [4 5 6 1 2 3]. A continuación, la función utiliza este vector de índice para reposicionar los elementos. Para un array multidimensional, fftshift debe construir un vector de índice para cada dimensión. Una lista separada por comas hace que esta tarea sea mucho más sencilla.

Aquí está 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 índice en la matriz de celdas idx. Construir esta matriz de celdas es relativamente simple. Para cada una de las cotas N, determine el tamaño de esa cota y busque el índice entero más cercano al punto mediano. A continuación, construya un vector que intercambie las dos mitades de esa dimensión.

Al utilizar una matriz de celdas para almacenar los vectores de índice y una lista separada por comas para la operación de indexación, fftshift desplaza matrices de cualquier dimensión utilizando una sola operación: y = x(idx{:}). Si tuviera que usar indexación explícita, necesitaría escribir una instrucción if para cada dimensión que desea que la función maneje:

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

Otra manera de manejar esto sin una lista separada por comas sería el bucle sobre cada dimensión, convirtiendo una dimensión a la vez y moviendo datos cada vez. Con una lista separada por comas, mueves los datos sólo una vez. Una lista separada por comas hace que sea muy fácil generalizar la operación de intercambio a un número arbitrario de dimensiones.