Ho una matrice Sparse in formato CSR Sparse in python e voglio importarla in MATLAB. MATLAB non ha un formato Spar CSR. Ha solo 1 formato Sparso per tutti i tipi di matrici. Dato che la matrice è molto grande nel formato denso mi chiedevo come potrei importarla come matrice sparse MATLAB?importazione di una matrice sparsa python in MATLAB
risposta
Il scipy.io.savemat
salva matrici sparse in un formato compatibile con MATLAB:
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]])
Nota che savemat
convertito a csc
. Inoltre, si occupa in modo trasparente della differenza del punto di partenza dell'indice.
E 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
I formati di matrice sparsa sono compatibili con i formati a matrice sparsa Matlab e Scipy. È necessario ottenere i dati, gli indici e le dimensioni della matrice della matrice in Scipy e utilizzarli per creare una matrice sparsa in Matlab. Ecco un esempio:
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
che stampa:
(0, 0) 1
(0, 2) 2
(1, 2) 3
(2, 0) 4
(2, 1) 5
(2, 2) 6
utilizzare i valori m, n, s, i, e j da Python per creare una matrice in Matlab:
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)
Che fornisce la stessa matrice, indicizzata solo da 1.
(1,1) 1
(3,1) 4
(3,2) 5
(1,3) 2
(2,3) 3
(3,3) 6
Grazie. Solo una piccola modifica suggerita. per l'ultimo (sesto) argomento del comando sparse, potremmo usare il risultato del metodo nnz invece di m * n per risparmiare spazio (o semplicemente ometterlo e passare 5 argomenti che avrebbero lo stesso effetto). – user3821329
- 1. In che modo Matlab traspone una matrice sparsa?
- 2. minimo di una matrice sparsa?
- 3. csv a matrice sparsa in python
- 4. Creare una matrice diagonale sparsa dalla riga di una matrice sparsa
- 5. somma massima subrectangle in una matrice sparsa
- 6. Come analizzare una matrice di adiacenza sparsa?
- 7. R: conversione matrice sparsa
- 8. Javascript scorrendo matrice sparsa
- 9. Operazioni con matrice sparsa su CUDA
- 10. Estrarre un blocco da una matrice sparsa come un'altra matrice sparsa
- 11. Come convertire la matrice sparsa in matrice densa in Eigen
- 12. Rotazione di una matrice 3D in MATLAB
- 13. Risoluzione di una matrice in MATLAB?
- 14. SVD per matrice sparsa in R
- 15. modo efficiente per creare una matrice sparsa diagonale
- 16. Generazione di una matrice densa da una matrice sparsa in NumPy pitone
- 17. Calcola la similarità della matrice sparsa
- 18. Converti matrice sparsa (csc_matrix) in dataframe panda
- 19. facile campionamento di vettori da una matrice sparsa, e la creazione di una nuova matrice dal campione (Python)
- 20. Importare file csv in una matrice/matrice in Python
- 21. "Desort" una matrice. Annullare l'ordinamento in Matlab
- 22. Come si campiona una matrice in MATLAB?
- 23. moltiplicazione della matrice numpy in memoria triangolare/sparsa?
- 24. Crea matrice sparsa da un riquadro dati
- 25. Factorizzazione rapida della matrice non negativa su matrice sparsa grande
- 26. Come convertire una matrice di gradazioni di grigio in una matrice RGB in MATLAB?
- 27. Pandas sparse dataFrame alla matrice sparsa, senza generare una matrice densa in memoria
- 28. Rimozione di elementi da una matrice di strutture in MATLAB
- 29. Norma vettoriale di una matrice di vettori in MATLAB
- 30. conteggio coincidenze di numeri in colonne di una matrice - MATLAB
Grazie. Questo è l'approccio diretto. – user3821329