how to return cell array with varargout?
14 次查看(过去 30 天)
显示 更早的评论
Dear all,
I know the title is not that explicit but I did not find a short way to formulate my question.
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
{[2]} {[4]} {[8]}
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
{[2]}
ii =
2
varargout =
1×2 cell array
{[2]} {[4]}
ii =
3
varargout =
1×3 cell array
{[2]} {[4]} {[8]}
But when I call my_cell I only get 2 which corresponds to the first loop result...
I hope I am clear enough.
Thanks a lot in advance!
Best regards,
louis
3 个评论
Steven Lord
2022-7-12
And the pattern Adam Danz showed in the accepted answer matches the "Function Return Values" section on the first of the pages to which Stephen23 linked.
采纳的回答
更多回答(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)
but you want a cell
a=varargoutexample(3,2)
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 个评论
Stephen23
2022-7-12
Note that VARARGOUT does absolutely nothing in the VARARGOUTEXAMPLE function, it can be simply replaced with a normal named output argument:
a = normalexample(3,2)
function out = normalexample(N,x)
out = cell(1,N);
for ii = 1:N
out{ii} = x.^ii;
end
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!