在Matlab中,一些函数使其输出适应调用中的输出变量数。例如,我可以这样做:
setlocal /?
我得到了
A=[[1 2 3];[4 5 6]];
s=size(A);
但如果我想独立处理宽度和高度,我可以这样做:
s=[2, 3];
我得到了:
H = 2; W = 3;
现在,如果我有一个函数总是输出一个向量,让我们说3个元素。 有没有办法将每个元素分配给不同的变量? 我的意思是避免这样的风景:
[h, w]=size(A);
我希望我已经解释了我的意思。
答案 0 :(得分:1)
我遇到了同样的问题。主要是函数处理坐标,如示例所示。我的解决方案是创建以下功能:
function varargout = dealOneByOne(vector)
% Assign each column of vector to each variable on the output variables
%
for i=1:size(vector,2)
varargout{i}=vector(:,i);
end
end
然后你可以做
[X,Y,Z]=dealOneByOne(getPosition());
我不知道有一种更简单的方法。
答案 1 :(得分:1)
让我们按如下方式定义测试函数:
function x = test()
x = [1 2 3];
end
鉴于上述功能,我通常会将输出数组拆分为许多不同的变量:
out = num2cell(test());
[a,b,c] = deal(out{:});
可以定义包装函数,以避免将上述赋值分散到多行:
[a,b,c] = vout_num(test());
function varargout = vout_num(x)
C = num2cell(x);
varargout = C(:).';
end
在您的示例中,包装函数将按如下方式使用:
[X,Y,Z] = vout_num(getPosition());