# how to return cell array with varargout?

조회 수: 17 (최근 30일)
Louis Tomczyk . 2022년 7월 12일
편집: Stephen23 . 2022년 7월 12일
Dear all,
I know the title is not that explicit but I did not find a short way to formulate my question.
Here (MATHWORKS - Simple explanation - how to use varargout) was given an example to use .
I remind here the code suggested:
function varargout = varargoutexample(x)
% Demonstrates how to use VARAGOUT.
% Pass in a vector of values.
% Note that NARGOUT is the number of output
% arguments you called the function with.
for ii = 1:nargout
varargout{ii} = x.^ii;
end
How can I change the code so as to get a dynamic cell array as an output.
To be more explicit I imagine something like:
function varargout = varargoutexample(N,x)
for ii = 1:N
varargout{ii} = x.^ii;
end
such as when I call the function I have:
% in the shell
my_cell = cell(1,3); % pre-allocation
>> my_cell = varargoutexample(3,2)
my_cell =
1x3 cell array
{} {} {}
And then get easy acces to the elements of my_cell :
my_cell{1} = 2
my_cell{2} = 4
my_cell{3} = 8
When I print the loop I have the expected result:
>> my_cell = varargoutexample(3,2)
ii =
1
varargout =
1×1 cell array
{}
ii =
2
varargout =
1×2 cell array
{} {}
ii =
3
varargout =
1×3 cell array
{} {} {}
But when I call my_cell I only get 2 which corresponds to the first loop result...
I hope I am clear enough.
Best regards,
louis
##### 댓글 수: 3표시 이전 댓글 수: 2숨기기 이전 댓글 수: 2
Louis Tomczyk 2022년 7월 12일
편집: Louis Tomczyk 님. 2022년 7월 12일
@Stephen23 thanks for the link, I didn't think about typing such keywords...

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

### 채택된 답변

myCell = cell(1,3);
[myCell{:}] = myfunc(__)
##### 댓글 수: 1표시 없음숨기기 없음
Louis Tomczyk 2022년 7월 12일
such reactivity!
perfect, thanks a lot!
Best,
louis

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

### 추가 답변 (1개)

Jonas 2022년 7월 12일
if i understand you cirrectly, you want as dynamic output variable varargout, and each of the given should/can be a cell itself
so not this
[a,b,c]=varargoutexampleMultVar(3,2)
a = 2
b = 4
c = 8
but you want a cell
a=varargoutexample(3,2)
a = 1×3 cell array
{} {} {}
function varargout = varargoutexampleMultVar(N,x)
varargout=cell(1,N);
for ii = 1:N
varargout{ii} = x.^ii;
end
end
function varargout = varargoutexample(N,x)
for ii = 1:N
varargout{1}{ii} = x.^ii;
end
end
##### 댓글 수: 3표시 이전 댓글 수: 2숨기기 이전 댓글 수: 2
Louis Tomczyk 2022년 7월 12일
@Stephen23 Yes that was obvious but I still don't understand the idea of needing to put exactly the right number of output arguments, for a function which will return time-varying number of outputs....
Indeed the syntaxt :
[mycell{:}]
is not obvious to me even if I admit I am far from being an expert...

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

### 카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

R2021b

### Community Treasure Hunt

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

Start Hunting!