MATLAB Answers

can i used cellfun with a function which has more than one input?

조회 수: 158(최근 30일)
Hello I have a function as follows
[ chart_datavortex ] = chart_funcv( 'AUD_USD', New_dataopenbidx, New_datahighbidx, New_datalowbidx,New_datax, New_datavol )
The function takes 6 inputs, however i wish to use CELLFUN so as to input an array of the first input. Thus I want to do something like the following
A = cellfun(chart_funcv,C)
This fails with error
Not enough input arguments.
Please advise

  댓글 수: 0

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

채택된 답변

Cedric Wannaz
Cedric Wannaz 8 Oct 2017
편집: Cedric Wannaz 8 Oct 2017
Yes, use an anonymous function (or define a function inline => name your anonymous function) to wrap the call to chart_funcv, and pass the wrapper to CELLFUN:
C = {'GBP_USD', 'GBP_AUD', 'USD_CAD'} ;
wrapper = @(x) chart_funcv( x, New_dataopenbidx, New_datahighbidx, New_datalowbidx,New_datax, New_datavol ) ;
A = cellfun( wrapper, C ) ;
If the output of the function is not scalar, set 'UniformOutput' to false in the call to CELLFUN:
A = cellfun( wrapper, C, 'UniformOutput', false ) ;
and A will be a cell array of (non-scalar) outputs.

  댓글 수: 7

표시 이전 댓글 수: 4
Cedric Wannaz
Cedric Wannaz 8 Oct 2017
What does chart_funcv output? If it is a cell array, then the output of CELLFUN is a cell array of cell arrays (all with the same size), and you can e.g. concatenate them:
result = cellfun( wrapper, C, 'UniformOutput', false ) ;
result = vertcat( result{:} ) ;
where result{:} is a comma separated list (CSL), so this call to VERTCAT is equivalent to:
result = vertcat( result{1}, result{2}, ... )
but works without you having to hard-code the whole thing with the correct number of cell contents.
Once concatenated, you can index e.g. column 2 with result(:,2). Note the block indexing (with parentheses). Block indexing a cell array returns the sub-cell array (block) indexed, which is a cell array as well. This is different from e.g. indexing result{1,3}, where curly-bracket indexing means: return the content of cell result(1,3).
Charles 8 Oct 2017
Yes. Correct the function returns a cell array. Thank you for this. Much appreciated. I will try it

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

추가 답변(0개)



Community Treasure Hunt

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

Start Hunting!

Translated by