Cellfun not working for cells contain cells?

8 次查看(过去 30 天)
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 个评论
per isakson
per isakson 2017-12-20
You increase the chance to receive an answer if you upload some data to use for testing of the answer.

请先登录,再进行评论。

采纳的回答

Guillaume
Guillaume 2017-12-20
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 个评论
Jan
Jan 2017-12-20
+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

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by