2016-08-23 37 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マトリックスに変換したいと思います。"とにかく「数字を抽出する」とはどういう意味ですか?各ブロックの合計を取る?あなたがそれをより良く説明するなら、私のダウンワードを引っ込めるでしょう。) –

+0

列4の数字はセル配列形式です。数字をベクトルに変換します。私は次のようなものを持っています:[0 2 6 7 8; 2 3 4 5 8; .....; 1 3 4 5 8]。ありがとう – Kola

答えて

1

あなたはおそらく全体のセル配列を使用することを意味しました。上記のあなたのコードは、あなたが思っていることをしません。ここに訂正されたバージョンがあります。 [newData{:,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  
[~, idx] = sort([data{:,2}], 'descend'); %%% 
newData = data(idx,:) 

、。しかし、現在のように、いくつかの行には4つの要素と5つの要素があるため、できません。したがって、左右に等しくなるようにゼロを追加するかどうかを決定する必要があります。

また、9x1と言う理由もわかりません。これらの行が単一の値を返すように操作することを意図している場合、ここではこれを明確にしていません。

+0

あなたのコメントとコードの変更をありがとうございます。あなたが正しく指摘したように、9x1の行列は間違っていて誤解を招いていました。また、あなたが指摘したように、いくつかの行は4つの数字を持っていますが、5つは5つです。左にゼロを加えて、それらを等しくしたいと思います。したがって、この特定のコードでは、出力は9x5の行列になります。ありがとう – Kola

+0

良い。 'padarray'関数を見て、それらが短い長さの場合には行列をパディングするために使用します –

関連する問題