Kindly explain this command
53 views (last 30 days)
Show older comments
final_song = cellfun(@plus, alto, treb, 'Uniform', 0);
Kindly explain this command. Basically i want to add alto and treb and they are being added. what does uniform and 0 mean in this command
0 Comments
Accepted Answer
Grzegorz Knor
on 22 Sep 2011
Option Uniform or UniformOutput set to 0 (or false) means, that output from function will be stored in cell array. It is necessary when function (in your case plus) returns non scalar values. If you set the UniformOutput value to 1 ( or true), your function must return scalar values and the output will be concatenated into an array.
Look at examples:
a = {rand(1),rand(2),rand(3),rand(4)}
b = {rand(1),rand(2),rand(3),rand(4)}
cellfun(@plus,a,b,'UniformOutput', false)
a = {rand(1),rand(1),rand(1),rand(1)}
b = {rand(1),rand(1),rand(1),rand(1)}
cellfun(@plus,a,b,'UniformOutput', false)
a = {rand(1),rand(1),rand(1),rand(1)}
b = {rand(1),rand(1),rand(1),rand(1)}
cellfun(@plus,a,b,'UniformOutput', true)
5 Comments
Grzegorz Knor
on 22 Sep 2011
So you have the answer. The sum of two matrices (vectors) is a matrix (vector) and not a scalar.
More Answers (1)
Jan
on 22 Sep 2011
Have you read "help cellfun" and "<http://www.mathworks.com/help/techdoc/ref/cellfun.html doc cellfun>" already?
There you find the information, that 'Uniform' is an abbreviation for 'UniformOutput' - sometimes neato users write 'Uni' only. And the description is:
a logical value indicating whether or not the output(s) of FUN can be
returned without encapsulation in a cell array
Actually the parameter should be of type LOGICAL, but MATLAB converts the 0 kindly to FALSE, as a 1 is converted to TRUE. Try this:
f = cellfun(@plus, {1}, {2}, 'Uniform', 0);
disp(f);
disp(class(f));
f = cellfun(@plus, {1}, {2}, 'Uniform', 1);
disp(f);
disp(class(f));
f = cellfun(@plus, {1}, {[2, 3]}, 'Uniform', 0);
disp(f);
disp(class(f));
% But this fails, because the output cannot be written to a vector,
% because the elements have different sizes:
f = cellfun(@plus, {1}, {[2, 3]}, 'Uniform', 1);
0 Comments
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!