代码之家  ›  专栏  ›  技术社区  ›  Pedro

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

  •  0
  • Pedro  · 技术社区  · 7 年前

    在Matlab中,一些函数根据调用中输出变量的数量调整其输出。例如,我可以:

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

    我得到了

    s=[2, 3];
    

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

    [h, w]=size(A);
    

    我得到:

    h=2; w=3;

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

    pos=getPosition();
    X=pos(1);
    Y=pos(2);
    Z=pos(3);
    

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Camilo Rada    7 年前

    我也有同样的问题。主要使用处理坐标的函数,如您的示例所示。我的解决方案是创建以下函数:

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

    我不知道有什么更简单的方法。

        2
  •  1
  •   Tommaso Belluzzo    7 年前

    让我们定义一个测试函数,如下所示:

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