Cellfun not working for cells contain cells?
12 次查看(过去 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
2017-12-20
You increase the chance to receive an answer if you upload some data to use for testing of the answer.
采纳的回答
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
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 Center 和 File Exchange 中查找有关 Cell Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!