Borrar filtros
Borrar filtros

Cellfun not working for cells contain cells?

8 visualizaciones (últimos 30 días)
Xiaohan Du
Xiaohan Du el 20 de Dic. de 2017
Comentada: Jan el 20 de Dic. de 2017
Hi all,
I have a cell like this
K>> respCol
respCol =
1×24 cell array
Columns 1 through 5
{3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell}
Columns 6 through 10
{3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell}
Columns 11 through 15
{3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell}
Columns 16 through 20
{3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell}
Columns 21 through 24
{3×1 cell} {3×1 cell} {3×1 cell} {3×1 cell}
and each cell contains
K>> respCol{1}
ans =
3×1 cell array
[1034×2 double]
[ 2×2 double]
[ 6×2 double]
Now I'd like to make the arrays in each cell negative using cellfun, I tried this but didn't work
K>> cellfun(@(v) -v, respCol, 'un', 0)
Undefined unary operator '-' for input arguments of type 'cell'.
Error in beam>@(v)-v
So how can I do it?
Many thanks!
  1 comentario
per isakson
per isakson el 20 de Dic. de 2017
You increase the chance to receive an answer if you upload some data to use for testing of the answer.

Iniciar sesión para comentar.

Respuesta aceptada

Guillaume
Guillaume el 20 de Dic. de 2017
Your cellfun code simply says: negate the content of each cell in the outer cell array. However, that content is itself a cell array and matlab doesn't know how to negate a cell array. So you need another cellfun to go into these inner cell array:
cellfun(@(x) cellfun(@uminus, x, 'UniformOutput', false), respCol, 'UniformOutput', false)
Note that
cellfun(@uminus, cellarray) %uminus is the function name of the negate operator -
will be faster than
cellfun(@(x) -x, cellarray)
  2 comentarios
Xiaohan Du
Xiaohan Du el 20 de Dic. de 2017
This totally works, thanks!
Jan
Jan el 20 de Dic. de 2017
+1. cellfun(@uminus, cellarray) is nice. But it might be worth to compare the run time with a dull loop:
for i1 = 1:numel(respCol)
C = respCol{i1};
for i2 = 1:numel(C)
C{i2} = -C{i2};
end
respCol{i1} = C;
end

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by