cellfun with empty cell input
14 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Wesley Ooms
am 7 Jan. 2015
Bearbeitet: Wesley Ooms
am 7 Jan. 2015
When I use cellfun with an empty cell as input, the output is an empty array. Is that a bug in matlab? How can that be avoided?
If i do x = arrayfun(@(i){y(i)},t),
and t is not an empty array, then x is a cell array and if t is empty, then x is an empty array which i can understand.
but if i do x = cellfun(@(i)y(i),num2cell(t)), i would expect x to be a cell always. no matter what t is.
Is it possible to always have x a cell array without checking if it is empty?
0 Kommentare
Akzeptierte Antwort
Guillaume
am 7 Jan. 2015
x = cellfun(@fn, c)
x = arrayfun(@fn, a)
x will never be a cell array regardless of input cell array c or array a, unless function fn returns a cell array. Thus with,
x = cellfun(@(i) y(i), num2cell(t))
unless y(i) is a cell array, x will never be a cell array.
To force cellfun and arrayfun to return cell arrays, set 'UniformOutput' to false:
x = cellfun(@(i) y(i), num2cell(t), 'UniformOutput', false)
5 Kommentare
Guillaume
am 7 Jan. 2015
Well to be perfectly equivalent to arrayfun, your for loop should be something like:
%y = arrayfun(@fn, x);
y = zeros(size(x));
for i = 1:numel(x)
tmp = fn(x(i));
if i == 1 && iscell(tmp)
y = cell(size(x));
end
y(i) = tmp;
end
Both behave the same way when passed an empty array.
The behaviour makes sense in any way. By default, arrayfun returns plain arrays and only returns cell arrays if explicitly asked or if the function called returned a cell array. When passed an empty array, arrayfun has no way to know that the function it never calls would return a cell array.
More practically, what are you actually trying to do? The examples that you've shown so far don't actually need any kind of arrayfun / cellfun. num2cell would be enough.
I also don't see why 'UniformOutput', false does not solve the problem.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!