2016-08-23 6 views
-1

Der folgende Code sortiert das Zellen-Array in absteigender Reihenfolge mit Spalte 2, ich möchte die Zahlen im Zell-Array in Spalte 4 extrahieren und sie in eine Matrix konvertieren.Konvertieren von Zahlen von Zellen-Arrays in Vektor-Matrix

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,:) 

Vielen Dank für Ihre Hilfe :)

+1

_ "Ich möchte die Zahlen im Zellenfeld in Spalte 4 extrahieren und in eine 9x1-Matrix konvertieren." _. Viel Glück =) Was meinst du mit "Zahlen extrahieren" trotzdem? Nimm die Summe von jedem Block? Ich werde meinen Downvote zurückziehen, wenn Sie es besser erklären =) –

+0

Die Zahlen in Spalte 4 sind im Zellenarray Format. Ich werde die Zahlen in Vektoren umwandeln. Ich möchte etwas haben wie: [0 2 6 7 8; 2 3 4 5 8; .....; 1 3 4 5 8]. Danke – Kola

Antwort

1

Sie wahrscheinlich Zellenfelder in ganz verwenden soll. Ihr Code oben tut nicht, was Sie denken, dass es tut. Hier ist eine korrigierte Version.

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,:) 

Jetzt, da für „zu einer Matrix zu extrahieren“, wenn alle Zeilen die gleiche Anzahl von Elementen enthalten sind, können Sie dies wie so erhalten: [newData{:,4}]. Aber so, wie es jetzt aussieht, können Sie nicht, weil einige Zeilen 4 Elemente und 5 haben. Sie müssen also entscheiden, ob Sie Nullen links oder rechts hinzufügen möchten, um sie gleich groß zu machen.

Auch ist es nicht klar, warum Sie 9x1 sagen. Wenn Sie eine Operation für diese Zeilen ausführen möchten, sodass sie einen einzelnen Wert zurückgeben, haben Sie dies hier nicht erläutert.

+0

Vielen Dank für Ihren Kommentar und Änderung des Codes. Wie Sie richtig angemerkt haben, war die 9x1-Matrix fehlerhaft und irreführend. Wie Sie bereits bemerkt haben, haben einige Zeilen 4 Zahlen, während einige 5 haben, ich möchte gerne Null (s) auf der linken Seite hinzufügen, um sie gleich zu machen. Daher wird für diesen speziellen Code die Ausgabe eine 9 × 5-Matrix sein. Danke – Kola

+0

gut. Sehen Sie sich die Padarray-Funktion an und verwenden Sie sie, um Matrizen zu puffern, wenn sie kürzer sind –

Verwandte Themen