2016-03-05 2 views
0

У меня есть матрица размером 14 x 13, и мне нужно пропустить эту матрицу и сохранить каждый столбец в отдельный одномерный массив.Создайте массив из каждого столбца матрицы

В настоящее время у меня есть следующий код:

for i = 1:14 
    for j = 1:13 
    if i == 1 
     A(1, j) = M(1, j) 
    elseif i == 2 
     B(1, j) = M(2, j) ... 
    end 
    end 
end 

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

Каков наилучший способ сделать это?

ответ

2

Я бы использовал num2cell, чтобы преобразовать это так, чтобы каждый столбец был отдельным элементом в cell array. Затем при необходимости вы можете назначить их различным переменным с помощью deal.

data = rand(14,13); 
cellArray = num2cell(data, 1); 

% And if you must assign them to variables. 
[A,B,C,D,E,F,G,H,I,J,K,L,M] = deal(cellArray{:}); 

В качестве альтернативы, вы можете просто получить доступ к элементам cellArray, а не назначая их переменных.

value = cellArray{1}; 
size(value) 

    14 1 

Если вы не можете использовать встроенные функции, лучше всего использовать оператор двоеточия, чтобы захватить все строки для данного столбца.

A = data(:,1); 
B = data(:,2); 

Вы определенно не хотят использовать для петель, если вы можете помочь ему, поскольку они, как известно, медленно в среде MATLAB.

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

+0

К сожалению, я не могу использовать какие-либо встроенные функции для этого: (Назначение требует, чтобы это выполнялось с использованием для циклов ... – Micard

+0

@Micard делает это явно для циклов или просто нет встроенных функций? – Suever

+0

Это не " t сказать «использовать для циклов», но я знаю ожидания. Смотрите, как я показал в своем примере кода, но мне интересно, есть ли лучший способ сделать это. Более процедурный способ. – Micard

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