将数字从单元格数组转换为矢量矩阵

时间:2016-08-23 08:45:36

标签: matlab

下面的代码使用第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 个答案:

答案 0 :(得分: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。如果您打算对这些行执行操作以使它们返回单个值,那么您在此处未明确说明。