2016-03-23 2 views
0

Предположим, у меня есть две столбцовые матрицы M=[0,1;2,3;4,5], и я хочу разбить их одновременно на два вектора. Я хочу, чтобы это было [A,B] = M, поэтому A=[0;2;4] и B=[1;3;5], но это не работает. Есть ли способ сделать это в одной строке кода? Моя фактическая матрица имеет около 20 столбцов, поэтому хранить их в одной строке было бы здорово!Разбиение матрицы на несколько столбцов

+0

Зачем вы хотите это сделать? – excaza

+0

Зачем вам это нужно? Почему 'A' по своей сути лучше, чем' M (:, 1) '? За исключением того факта, что вы не можете перебирать «A, B, C, ...», не прибегая к какому-то неприятному коду ... – beaker

+0

Мне нужно это, потому что векторы имеют особое значение, и мне нужно выбрать позже подмножество в соответствии с именем переменной. Если я использую индексы, то я не знаю, каково их значение, поскольку нет имени переменной –

ответ

4

Самый простой способ сделать это - это комбинация num2cell и deal.

M = rand(4,2); 

    0.8173 0.2599 
    0.8687 0.8001 
    0.0844 0.4314 
    0.3998 0.9106 


inputData = num2cell(M, 1); 
[A, B] = deal(inputData{:}); 


A = 

    0.8173 
    0.8687 
    0.0844 
    0.3998 

B = 

    0.2599 
    0.8001 
    0.4314 
    0.9106 

Альтернативно, как suggested by Daniel можно опустить deal:

[A, B] = inputData{:}; 

Это, как говорится, когда вы получаете большее количество элементов, просто оставить их в массив ячеек, а не пытаться жонглировать 20 переменные.

columns = num2cell(M, 1); 

    [4x1 double] [4x1 double] 
+0

Это именно то, что я искал. Я пробовал это раньше, но M уже был массивом ячеек, поэтому я пропустил преобразование в ячейку, что является критическим. –

+0

@ HéctorvandenBoorn Хотя это может решить вашу прямую проблему. Я бы очень рекомендовал совет стакана и excaza в первоначальных комментариях. Если ваши данные имеют одинаковый размер, подумайте о том, чтобы поместить его в 2D-массив, поскольку производительность будет намного лучше. – Suever

+2

Не нужно использовать 'deal':' [A, B] = inputData {:}; ' – Daniel

Смежные вопросы