如何将输出的每个元素/列分配给不同的变量

时间:2018-02-24 20:29:53

标签: matlab vector variable-assignment

在Matlab中,一些函数使其输出适应调用中的输出变量数。例如,我可以这样做:

setlocal /?

我得到了

A=[[1 2 3];[4 5 6]];
s=size(A);

但如果我想独立处理宽度和高度,我可以这样做:

s=[2, 3];

我得到了:

H = 2; W = 3;

现在,如果我有一个函数总是输出一个向量,让我们说3个元素。 有没有办法将每个元素分配给不同的变量? 我的意思是避免这样的风景:

[h, w]=size(A);

我希望我已经解释了我的意思。

2 个答案:

答案 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());