2016-03-05 117 views
0

我有一個14×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); 

絕對不想使用for循環,如果你能幫助它,因爲他們是出了名的慢MATLAB。這就是說,將數據保存爲矩陣然後在列上執行操作可能會更容易一些。矩陣比在工作空間中有一百萬個不同變量的數據結構要乾淨得多。這取決於你接下來要做什麼。

+0

不幸的是,我不能使用任何內置函數:(該任務希望使用for循環完成... – Micard

+0

@Micard是否明確說明循環或只是沒有內置函數? – Suever

+0

它沒有'不要說「用於循環」,但我知道期望值,請參閱我在代碼示例中顯示的方式,但是我想知道是否有更好的方法來實現它,更程序化的方式。 – Micard