【问题标题】:How to assign a matrix to several several vectors at once?如何一次将一个矩阵分配给几个向量?
【发布时间】:2014-11-06 23:00:10
【问题描述】:

我注意到如果我们想将一个向量分配给几个变量,我们可以使用“deal”;但是当将一个矩阵分配给几个向量时,它就行不通了。例如

A=[1 2; 3 4];
A=num2cell(A);
[a, b]=deal(A{:})

它给出一个错误消息"Error using deal (line 38) The number of outputs should match the number of inputs."

你知道如何改进代码吗?谢谢!!

【问题讨论】:

  • 尝试编辑您的答案以提供有关您的环境、编程语言等的更多信息。正如所写的那样,没有很多有用的信息可以用来帮助您。

标签: matlab variable-assignment


【解决方案1】:

您可以非常轻松地编写自己的交易:

# in mydeal.m
function  varargout = mydeal(varargin)
    % Assign values in vector into variables.
    %
    % EXAMPLE 1
    % [a,b,c] = mydeal([1,2,3]);
    % EXAMPLE 2
    % some_vector = [1,2,3];
    % [a,b,c] = mydeal(some_vector);
    %
    % %results in a=1, b=2, c=3;
    %


    assert(nargout == size(varargin{1}, 2), 'Different number of in and out arguments');

    for i = 1:nargout
         varargout{i} = varargin{1}(:, i);
    end

例如:

>> [a,b] = mydeal([1 2; 3 4])

a =

     1
     3


b =

     2
     4

或者

>> [a,b, c] = mydeal([1 2 3])

a =

     1


b =

     2


c =

     3

【讨论】:

    【解决方案2】:

    您几乎得到了解决方案,但是您的代码将 A 拆分为一个带有标量元素的 2x2 单元。使用num2dell的第二个入参分割成列向量:

    A=[1 2; 3 4];
    A=num2cell(A,1);
    [a, b]=deal(A{:})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      相关资源
      最近更新 更多