2016-08-23 166 views
-1

下面的代碼使用第2列按降序對單元格數組進行排序,我想提取第4列中單元格數組中的數字並將它們轉換爲矩陣。將數字從單元格數組轉換爲向量矩陣

data = cell (9,4); 

col1 = ['A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I']; 
col2 = [-45 -90 -50 -54 -70 -57 -75 -64 -23];  
col3 = [{'1,1'},{'1,5'},{'3,9'},{'4,2'},{'4,6'},{'6,2'},{'7,6'},{'6,9'},{'9,9'}];  
col4 = [{2 3 4 5 8},{1 3 4 5 8},{1 2 5 7 8},{1 2 3 6 7},{3 4 7 8},{2 4 8 9},{2 4 5 9},{4 5 7 9},{2 6 7 8}]; 

for i = 1:length(data)  
    data{i,1} = col1(i);  
    data{i,2} = col2(i);  
    data{i,3} = col3(i);  
    data{i,4} = col4(i); 
end  
[trash, idx] = sort([data{:,2}], 'descend');  
newData = data(idx,:) 

謝謝您的幫助:)

+1

_「我想提取列4中單元格數組中的數字並將它們轉換爲9x1矩陣。」_。祝你好運=)無論如何,「提取數字」意味着什麼?取每塊的總和?如果你更好地解釋它,我會收回我的downvote =) –

+0

第4列中的數字是單元格數組格式。我會將這些數字轉換成矢量。我想喜歡這樣的東西:[0 2 6 7 8; 2 3 4 5 8; .....; 1 3 4 5 8]。謝謝 – Kola

回答

1

你可能意味着在整個使用電池陣列。上面的代碼不會做你認爲它的作用。這是一個更正的版本。現在

data = cell (9,4); 

col1 = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'}; 
col2 = {-45, -90, -50, -54, -70, -57, -75, -64, -23};  
col3 = {'1,1', '1,5', '3,9', '4,2', '4,6', '6,2', '7,6', '6,9', '9,9'}; %%% 
col4 = {[2 3 4 5 8],[1 3 4 5 8],[1 2 5 7 8],[1 2 3 6 7],[3 4 7 8],[2 4 8 9],[2 4 5 9],[4 5 7 9],[2 6 7 8]}; %%% 

for i = 1:length(data)  
    data{i,1} = col1{i};  
    data{i,2} = col2{i};  
    data{i,3} = col3{i}; %%%  
    data{i,4} = col4{i}; %%% 
end  
[~, idx] = sort([data{:,2}], 'descend'); %%% 
newData = data(idx,:) 

,作爲「解壓到一個矩陣」,如果所有行包含相同數量的元素,你可以得到這個像這樣:[newData{:,4}]。但是,現在你不能這樣做,因爲有些行有4個元素,有5個元素。因此,你需要決定是否要向左或向右添加零等,以使它們具有相同的大小。

此外,目前還不清楚你爲什麼說9x1。如果你的目的是在這些行上執行一個操作,使得它們返回一個單一的值,那麼你在這裏就沒有說清楚了。

+0

感謝您對代碼的評論和修改。正如您正確地指出的那樣,9x1矩陣有誤和誤導。另外,正如你所指出的,一些行有4個數字,而有些則有5個,我想在左邊添加零,以使它們相等。因此,對於這個特定的代碼,輸出將是一個9x5的矩陣。謝謝 – Kola

+0

不錯。看看padarray函數,如果長度較短,可以用它來填充矩陣 –