Ich habe eine Sparse-Matrix im CSR-Sparse-Format in Python und möchte es in MATLAB importieren. MATLAB hat kein CSR-Sparse-Format. Es hat nur ein Sparse-Format für alle Arten von Matrizen. Da die Matrix im dichten Format sehr groß ist, frage ich mich, wie ich sie als MATLAB-Sparse-Matrix importieren könnte.Importieren einer Python-Sparse-Matrix in MATLAB
Antwort
Die scipy.io.savemat
speichert dünn besetzte Matrizen in einem MATLAB-kompatibles Format:
In [1]: from scipy.io import savemat
In [2]: from scipy import sparse
In [3]: M = sparse.csr_matrix(np.arange(12).reshape(3,4))
In [4]: savemat('temp', {'M':M})
In [8]: x=loadmat('temp.mat')
In [9]: x
Out[9]:
{'M': <3x4 sparse matrix of type '<type 'numpy.int32'>'
with 11 stored elements in Compressed Sparse Column format>,
'__globals__': [],
'__header__': 'MATLAB 5.0 MAT-file Platform: posix, Created on: Mon Sep 8 09:34:54 2014',
'__version__': '1.0'}
In [10]: x['M'].A
Out[10]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
Beachten Sie, dass savemat
es csc
umgewandelt. Es sorgt auch transparent für die Indexstartpunktdifferenz.
Und in Octave
:
octave:4> load temp.mat
octave:5> M
M =
Compressed Column Sparse (rows = 3, cols = 4, nnz = 11 [92%])
(2, 1) -> 4
(3, 1) -> 8
(1, 2) -> 1
(2, 2) -> 5
...
octave:8> full(M)
ans =
0 1 2 3
4 5 6 7
8 9 10 11
Die Matlab und Scipy Sparse-Matrix-Formate sind kompatibel. Sie müssen die Daten, die Indizes und die Matrixgröße der Matrix in Scipy ermitteln und daraus eine spärliche Matrix in Matlab erstellen. Hier ein Beispiel:
from scipy.sparse import csr_matrix
from scipy import array
# create a sparse matrix
row = array([0,0,1,2,2,2])
col = array([0,2,2,0,1,2])
data = array([1,2,3,4,5,6])
mat = csr_matrix((data,(row,col)), shape=(3,4))
# get the data, shape and indices
(m,n) = mat.shape
s = mat.data
i = mat.tocoo().row
j = mat.indices
# display the matrix
print mat
Welche ausdruckt:
(0, 0) 1
(0, 2) 2
(1, 2) 3
(2, 0) 4
(2, 1) 5
(2, 2) 6
die Werte m verwenden, n, s, i und j aus Python eine Matrix in Matlab zu erstellen:
m = 3;
n = 4;
s = [1, 2, 3, 4, 5, 6];
% Index from 1 in Matlab.
i = [0, 0, 1, 2, 2, 2] + 1;
j = [0, 2, 2, 0, 1, 2] + 1;
S = sparse(i, j, s, m, n, m*n)
Die gibt die gleiche Matrix, nur indiziert von 1.
(1,1) 1
(3,1) 4
(3,2) 5
(1,3) 2
(2,3) 3
(3,3) 6
Dank. Nur eine kleine vorgeschlagene Änderung. Für das letzte (sechste) Argument des Sparse-Befehls könnten wir das Ergebnis der nnz-Methode anstelle von m * n verwenden, um Speicherplatz zu sparen (oder es einfach wegzulassen und 5 Argumente zu übergeben, die den gleichen Effekt haben). – user3821329
- 1. Teil einer Audiodatei in Matlab importieren
- 2. Matlab: kann Paket nicht importieren
- 3. Importieren von Spears SDIF-Dateien in Matlab
- 4. Importieren Sie mehrere Textdateien auf Matlab
- 5. Importieren/Lesen/Laden von Variablen aus Matlab Matfile in C#
- 6. Importieren Sie ITK/VTK in Matlab oder Matlab in VTK/ITK-Umgebung?
- 7. Schnellste Möglichkeit zum Importieren von CSV-Dateien in MATLAB
- 8. Matlab: Importieren eines Pakets in einem anderen Verzeichnis
- 9. Wie greife ich auf alle Daten in einer Excel-Zelle zu? Ich muss in MATLAB importieren
- 10. Importieren einer Textdatei in R
- 11. Importieren einer TermDocumentMatrix in R
- 12. Importieren einer Datei in Python
- 13. Lösen einer Matrix in MATLAB?
- 14. Argumente einer Funktion in Matlab
- 15. Berechnen einer Spirale in MATLAB
- 16. Löschen einer Matrixspalte in Matlab
- 17. MATLAB: Subplot einer Schleife
- 18. Plot in einer Schleife in MATLAB
- 19. So finden Sie verfügbare Klassen beim Importieren einer .jar-Datei nach Matlab
- 20. Textdatei in Matlab scannen
- 21. Importieren einer externen Bibliothek in xcode - C++
- 22. Importieren einer c-DLL-Funktion in C#
- 23. Importieren einer einfachen Javascript-Datei in Typescript
- 24. Importieren von Modulen in einer Remotesitzung
- 25. Importieren einer CSV-Datei in Java
- 26. Importieren einer Klasse in eine JSP-Datei
- 27. MAMP: Importieren einer großen Datenbank in phpMyAdmin
- 28. Importieren einer Datenbank in DataGrip (0xDBE)
- 29. Drehen einer 3D-Matrix in MATLAB
- 30. Zeichnen Normalverteilung Graph einer Probe in Matlab
Danke. Dies ist der direkte Ansatz. – user3821329