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.

Las listas separadas por comas

¿Qué es una lista separada por comas?

Escribir en una serie de números separados por comas le da lo que se llama a.comma-separated list El software devuelve cada valor individualmente:MATLAB®

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

Esta lista, por sí misma, no es muy útil. Pero cuando se usa con estructuras de datos grandes y más complejas como estructuras y matrices de celdas, la lista separada por comas puede permitirle simplificar el código.MATLABMATLAB

Generar una lista separada por comas

En esta sección se describe cómo generar una lista separada por comas a partir de una matriz de celdas o 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 array 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] 

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

Empiece por convertir la matriz de celdas utilizada anteriormente en una estructura de 4 por 1 con seis campos: through.MATLABf1f6 Campo de lectura para todas las filas y devuelve una lista separada por comas:f5MATLAB

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 salida de 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 de la sección anterior, asigne la primera fila a las variables a través de: Si especifica menos variables de salida que el número de salidas devueltas por la expresión, asigna las primeras N salidas a esas N variables y, a continuación, descarta cualquier resto Salidas.Cc1c6

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 
MATLAB En este ejemplo siguiente, asigna a las variables y, a continuación, descarta: puede asignar salidas de estructura de la misma manera: también puede utilizar la función para este propósito.MATLABC{1,1:3}c1c2c3C{1,4:6}
[c1,c2,c3] = C{1,1:6};
S = cell2struct(C,{'f1','f2','f3','f4','f5','f6'},2); [sf1,sf2,sf3] = S.f5; sf3 
sf3 =      38 
deal

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.

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

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

Se utiliza para sobrescribir cada elemento de la lista.deal

[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 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

Se utiliza para sobrescribir los campos de estructura.deal

[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

En las secciones siguientes se proporcionan ejemplos del uso 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 matriz. Tenga en cuenta lo que sucede cuando se inserta una de elementos en lugar de agregar la propia celda.list

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

A = {'Hello',C{:,5},magic(4)} 
A =       'Hello'    [34]    [36]    [38]    [40]    [4x4 double] 

Cuando se especifica la propia celda, se inserta toda la matriz de celdas:CMATLAB

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

Colocar una lista separada por comas dentro de corchetes extrae los elementos especificados de la lista y los conmemora:

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, escriba 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 todo o parte de la lista de argumentos de la estructura o matriz de celdas en su lugar. Esto puede ser especialmente útil al pasar un número variable de argumentos.

Este ejemplo pasa varios argumentos de atributo-valor 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{:}) 

Función valores devueltos

funciones también pueden devolver más de un valor al llamador.MATLAB Estos valores se devuelven en una lista con cada valor separado por una coma. En lugar de enumerar cada valor devuelto, puede usar una lista separada por comas con una estructura o matriz de celdas. Esto se vuelve más útil para aquellas funciones que tienen números variables 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 intercambia las mitades izquierda y derecha de cada dimensión de una matriz.fftshift Para un vector simple como la salida sería.[0 2 4 6 8 10][6 8 10 0 2 4] Para una matriz multidimensional, realiza este intercambio a lo largo de cada dimensión.fftshift

utiliza vectores de índices para realizar el intercambio.fftshift Para el vector que se muestra arriba, el índice se reorganiza para formar un nuevo índice.[1 2 3 4 5 6][4 5 6 1 2 3] A continuación, la función utiliza este vector de índice para cambiar la posición de los elementos. Para una matriz multidimensional, debe construir un vector de índice para cada dimensión.fftshift 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 La construcción de esta matriz de celdas es relativamente simple. Para cada una de las cotas, determine el tamaño de esa cota y busque el índice entero más cercano al punto medio.N A continuación, construya un vector que intercambia las dos mitades de esa dimensión.

Mediante el uso de una matriz de celdas para almacenar los vectores de índice y una lista separada por comas para la operación de indexación, desplaza las matrices de cualquier dimensión mediante una sola operación:.fftshifty = x(idx{:}) Si utilizaría la indexación explícita, necesitaría escribir una instrucción para cada dimensión que desee que controle la función:if

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

Otra forma de manejar esto sin una lista separada por comas sería recorrer cada dimensión, convirtiendo una dimensión a la vez y moviendo los datos cada vez. Con una lista separada por comas, mueve los datos una sola 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.