2016-03-22 17 views
0

Ich habe eine Sparse Matrix in Matlab. Ich möchte die Positionen der 1en in der Matrix zeilenweise und spaltenweise speichern.Matlab Matrix speichern 1 Positionen für große Matrizen

Zum Beispiel sollten Sie die folgenden Matrix:

0 1 0 1 0 
0 0 0 1 0 
0 0 0 0 0 
0 0 1 0 0 
1 0 0 0 0 

Ich möchte zwei Dateien geschrieben als: Zeilen wise.csv:

1,2 
1,4 
2,4 
4,3 
5,1 

säulen wise.csv:

5,1 
1,2 
4,3 
1,4 
2,4 

ich weiß, ich kann eine Schleife zeilenweise oder spaltenweise laufen und Element für Element speichern fprintf verwenden, aber ist gibt es einen besseren Weg? Ich bin mit sehr großen Matrizen zu tun und ich frage mich, was eine effiziente Möglichkeit, dies zu tun ist?

Antwort

2

Sie gehen zu wollen, find verwenden, um diese Aufgabe zu erfüllen. Um sie dann in eine CSV-Datei zu schreiben, können Sie einfach verwenden.

Für die spaltenweise können Sie die beiden Ausgaben find verwenden, die den Zeilenindex und den Spaltenindex von jeder 1 (in der Reihenfolge der Spalten) darstellen.

data = [0 1 0 1 0 
     0 0 0 1 0 
     0 0 0 0 0 
     0 0 1 0 0 
     1 0 0 0 0]; 

[row, col] = find(data); 
M = [row, col]; 
dlmwrite('column-wise.csv', M); 

dann das reihenweise Ergebnis zu erhalten, können Sie einfach durch Reihen Ihr spaltenweise Ergebnis sortieren und dann sortrows mit Spalten.

dlmwrite('row-wise.csv', sortrows(M)) 

Die Alternative dazu ist find wieder auf dem transponiert Ihre Daten durchzuführen (zu Zeilenhaupt Ordnung zu zwingen), aber ich würde denken, dass der sortrows Ansatz schneller ist.

[col, row] = find(data.'); 
dlmwrite('row-wise.csv', [row, col]) 
+0

Thank you !! Sobald ich die Frage gestellt hatte, wurde mir klar, dass ich zu früh sprach! Danke trotzdem. – kami

Verwandte Themen