Borrar filtros
Borrar filtros

Kindly explain this command

49 visualizaciones (últimos 30 días)
moonman
moonman el 22 de Sept. de 2011
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

Respuesta aceptada

Grzegorz Knor
Grzegorz Knor el 22 de Sept. de 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 comentarios
Grzegorz Knor
Grzegorz Knor el 22 de Sept. de 2011
So you have the answer. The sum of two matrices (vectors) is a matrix (vector) and not a scalar.
moonman
moonman el 22 de Sept. de 2011
Thanks a lot

Iniciar sesión para comentar.

Más respuestas (1)

Jan
Jan el 22 de Sept. de 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);

Categorías

Más información sobre Creating and Concatenating 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