2014-11-06 3 views
2

Я замечаю, что если мы хотим присвоить вектор нескольким переменным, мы можем использовать '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."

Вы знаете, как улучшить код? Спасибо!!

+1

Попробуйте изменить свой ответ, чтобы предоставить более подробную информацию о среде, языка программирования и т.д. Как там написано не очень много полезной информации, которая может быть использована для помочь тебе. – par

ответ

0

Вы можете написать свое собственное дело очень Исли:

# 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 
0

Вы почти получили решение, но ваш код расщепляет А в ячейку 2x2 со скалярными элементами. Используйте второй входной параметр num2dell разделить на векторы-столбцы:

A=[1 2; 3 4]; 
A=num2cell(A,1); 
[a, b]=deal(A{:}) 
Смежные вопросы