필터 지우기
필터 지우기

Kindly explain this command

조회 수: 49 (최근 30일)
moonman
moonman 2011년 9월 22일
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

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Jan
Jan 2011년 9월 22일
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);

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by