【问题标题】:How to assign each element/column of output to a different variable如何将每个元素/输出列分配给不同的变量
【发布时间】:2018-08-04 15:46:42
【问题描述】:

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

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

【问题讨论】:

    标签: matlab vector variable-assignment


    【解决方案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());
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 2017-10-20
        • 2015-05-08
        相关资源
        最近更新 更多