usted tiene que utilizar ()
en lugar de {}
para indexar las células:
function left = remove(cells, item)
left = cells(cellfun(@(i) ~isequal(item, i), cells));
Usando ()
para la indexación le dará un subconjunto de células, mientras que el uso de {}
devolverá los contenidos de un subconjunto de células como comma-separated list, y sólo la primera entrada de la lista conseguirá colocado en left
en su ejemplo.
Se puede extraer de this MATLAB documentation para obtener más información sobre el uso de células matrices.
EDIT: respuesta al comentario ...
Si usted tiene una operaciónque termina dándole una lista separada por comas, puede colocar los elementos individuales de la lista en las células de una matriz de células rodeando la operación con llaves. Por su ejemplo, se podría hacer:
left = {cells{cellfun(@(i) ~isequal(item, i), cells)}};
El conjunto interior de llaves crea una lista separada por comas de los contenidos de cells
que no son iguales a item
, y el conjunto exterior a continuación recoge esta lista en una célula formación. Esto, por supuesto, dar el mismo resultado que sólo usar paréntesis para la indexación, que es el enfoque más sensible en este caso.
Si usted tiene una funciónque devuelve varios argumentos de salida, y se quiere recoger estos múltiples valores en una matriz celular, entonces es un poco más complicado. Primero hay que decidir cuántos argumentos de salida obtendrá, o puede utilizar la función NARGOUT para obtener todas las salidas posibles:
nOut = 3; %# Get the first three output arguments
%# Or...
nOut = nargout(@some_fcn); %# Get all the output arguments from some_fcn
A continuación, puede obtener los resultados en una serie de células de 1 a paso nOut
outArgs
por haciendo lo siguiente:
[outArgs{1:nOut}] = some_fcn(...);
Cabe señalar que NARGOUT devolverá un valor negativo si la función tiene un variable number of output arguments, por lo que tendrá que elegir el valor de nOut
a sí mismo en un caso así.
Aha! Por supuesto. Entonces, ¿qué ocurre si hay una función que devuelve múltiples valores? ¿Hay alguna manera de agruparlos en un cellarray después del hecho? – prismofeverything
@kaleidomedallion: No estoy seguro si se refiere a una * función * o una * operación * que devuelve varios valores, por lo que actualicé mi respuesta para explicar ambas. – gnovice
Esto respondió completamente mi pregunta. ¡Muchas gracias! – prismofeverything