Comment puis-je sauver un très grand MATLAB sparse matrix dans un fichier texte?
J'ai un 30000x14000 sparse matrix dans MATLAB (version 7), qui je dois l'utiliser dans un autre programme. Appeler save n'est pas écrire ce que l'ASCII (non pris en charge). L'appel de full()
sur ce monstre de résultats dans un Out of Memory
erreur.
Comment puis-je exporter?
OriginalL'auteur Midhat | 2008-10-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser pour tirer index & valeur vecteurs:
Vous pouvez recréer les données de data_dump avec spconvert, qui est destiné à "Importer à partir de matrices creuses format externe" (je crois que c'est un bon format d'exportation):
Vous pouvez enregistrer au format ascii avec:
Mais ce décharges d'indices, comme un double, vous pouvez l'écrire plus joliment avec fopen/fprintf/fclose:
Espère que cette aide.
J'ai édité dans la correction @AlanCN suggéré.
OriginalL'auteur Matt
Enregistrer la matrice creuse comme un
.mat
fichier. Puis, dans l'autre programme, à l'aide de la bibliothèque pour lire le.mat
fichier.Par exemple, si l'autre programme est écrit en Python, vous pouvez utiliser le
scipy.io.mio.loadmat
fonction, qui prend en charge matrices creuses et vous offre un clairsemée numpy matrice.OriginalL'auteur Vebjorn Ljosa
Je l'ai enregistré en tant que texte à l'aide de Java dans MATLAB.
Code MATLAB:
Ici
data
est une très grande matrice creuse.probablement parce que je savais mieux java que matlab, et c'était un jeter du code, de sorte qu'il n'a pas besoin d'être beau. il a juste besoin de travailler correctement 🙂
OriginalL'auteur Midhat
Avez-vous essayez de le partitionner ?
Je veux dire essayer d'appeler pleine() sur les 1000 premières lignes (ou 5000) et puis répétez le processus si cela fonctionne.
OriginalL'auteur Veynom
Utiliser le
find
fonction pour obtenir les indices de non-zéro éléments...Si vous le souhaitez, vous pouvez utiliser
ind2sub
pour convertir le linéaire des indices de la ligne, la colonne des indices.Si vous avez besoin de recréer une matrice creuse dans matlab à partir des indices + valeurs, utilisez
spconvert
.OriginalL'auteur Mr Fooz
dlmwrite - Écrire la matrice de l'ASCII d'un fichier délimité
Syntaxe
dlmwrite(nom de fichier, M)
dlmwrite(nom de fichier, M, 'D')
dlmwrite(nom de fichier, M, D, R, C)
dlmwrite(nom de fichier, M, 'attrib1', valeur1, 'attrib2', valeur2, ...)
dlmwrite(nom de fichier, M, '-append')
dlmwrite(nom de fichier, M, '-append', attribut-valeur de la liste)
OriginalL'auteur ehsan
Si c'est assez bien d'une affaire, alors que je vient de parcourir la matrice et écrire la matrice dans un fichier ASCII par force brute, ou d'utiliser @Veynom de l' suggestion et de l'appel complet() sur un sous-ensemble de lignes. Il peut prendre un certain temps, mais il sera probablement plus rapide qu'il pourrait prendre pour apprendre à lire dans une .tapis de fichier en dehors de l'environnement.
Si c'est quelque chose que vous devez faire sur une base récurrente, alors je profite de @Vebjorn's des conseils et de l'utilisation d'une bibliothèque pour lire la .tapis de fichier.
OriginalL'auteur Scottie T
Utiliser ce script:
msm_to_mm.m, écrit un MATLAB sparse matrix à un MatrixMarket fichier.
Et Ce fil peut également être utile.
OriginalL'auteur Dr_Hope