Python: wie speichern Sie eine sparse-matrix mit python?
Ich habe eine Ausgabe mit sparse matrix in python, die ich brauche, um zu speichern diese sparse-matrix-in meiner Festplatte, wie kann ich es tun? wenn ich eine Datenbank erstellen, die dann, wie soll ich tun??
das ist mein code:
import nltk
import cPickle
import numpy
from scipy.sparse import lil_matrix
from nltk.corpus import wordnet as wn
from nltk.corpus import brown
f = open('spmatrix.pkl','wb')
def markov(L):
count=0
c=len(text1)
for i in range(0,c-2):
h=L.index(text1[i])
k=L.index(text1[i+1])
mat[h,k]=mat[h,k]+1//matrix
cPickle.dump(mat,f,-1)
text = [w for g in brown.categories() for w in brown.words(categories=g)]
text1=text[1:500]
arr=set(text1)
arr=list(arr)
mat=lil_matrix((len(arr),len(arr)))
markov(arr)
f.close()
Brauche ich zum speichern dieser "Matte" in eine Datei und sollte Zugriff auf den Wert der matrix mit den Koordinaten..
Ergebnis des sparse-matrix ist wie folgt: "das Ergebnis der sparse-matrix wie folgt:
(173, 168) 2.0 (173, 169) 1.0 (173, 172) 1.0 (173, 237) 4.0 (174, 231) 1.0 (175, 141) 1.0 (176, 195) 1.0
aber wenn ich es speichern in eine Datei und Lesen das gleiche hab ich es immer so:
(0, 68) 1.0 (0, 77) 1.0 (0, 95) 1.0 (0, 100) 1.0 (0, 103) 1.0 (0, 110) 1.0 (0, 112) 2.0 (0, 132) 1.0 (0, 133) 2.0 (0, 139) 1.0 (0, 146) 2.0 (0, 156) 1.0 (0, 157) 1.0 (0, 185) 1.0
- Sie haben eine Besondere Datenbank im Sinn? Was die Größe dieser Matrizen? Haben Sie als sqlite (die Python hat eine eingebaute Unterstützung für)?
- ich bin ein Neuling, ich weiß nicht viel, naja ich hab nur versucht eine Lösung zu finden, der zum speichern der matrix in der Festplatte, die ich nicht wollen, um das Programm auszuführen, zu produzieren, die matrix immer wieder, wenn ich die Speicherung der matrix kann ich nur verweisen Sie die matrix von Werten für die nächste Zeit.. pls mir empfehlen.. danke 🙂
- Finden Sie in der folgenden zu formatieren Sie Ihren code so, dass es lesbar ist: stackoverflow.com/editing-help, im Grunde aber setzen Sie einfach 4 Leerzeichen vor jeder Zeile code und dann einzurücken, wie Sie wäre sonst machen Sie sicher, dass Sie lassen Sie eine Leerzeile zwischen code und kein normaler text.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: Diese Antwort ist die Antwort auf die überarbeiten die Frage, die sich nun bietet-code.
Sollten Sie nicht nennen
cPickle.dump()
in Ihrer Funktion. Erstellen sparse-matrix-und dann dump der Inhalt der Datei.Versuchen:
mat.dump('output.mat')
womat
ist meine matrix.. Das ist der Fehler, die ich zu finden binraise AttributeError, attr + " not found" AttributeError: dump not found
Vorausgesetzt, Sie haben ein numpy
matrix
oderndarray
, die Ihre Frage und die tags bedeuten, es ist eindump
Methode undLast
Funktion, die Sie verwenden können:pyTables ist die Python-Schnittstelle zu Daten im HDF5-Modell und ist ziemlich beliebt und gut integriert mit NumPy und SciPy. pyTables, mit dem Sie Zugriff Scheiben databased-arrays, ohne zu laden, wird das gesamte array wieder in Erinnerung.
Ich habe keine speziellen Erfahrungen mit sparse-Matrizen per se, und eine schnelle Google-Suche weder bestätigt noch geleugnet werden, dass sparse-Matrizen unterstützt werden.
Hinzufügen auf die im HDF5-Unterstützung, Python hat auch NetCDF-Unterstützung, die ideal für die matrix-form der Daten-Speicherung und den schnellen Zugriff sowohl spärlich und dichten. Es ist enthalten in Python-x,y für windows, die eine Menge von wissenschaftlichen Nutzer von python am Ende mit.
Mehr numpy basiert Beispiele können gefunden werden in diesem Kochbuch.
Für sehr große dünnbesetzte Matrizen auf Clustern verwenden Sie pytrilinos, es hat eine im HDF5-interface, welches dump kann eine sparse-matrix auf die Festplatte, und funktioniert auch, wenn die matrix wird verteilt auf verschiedenen Knoten.
http://trilinos.sandia.gov/packages/pytrilinos/development/EpetraExt.html#input-output-classes
Abhängig von der Größe des sparse-matrix, Neige ich dazu, verwenden Sie einfach
cPickle
zu Gurke array:Wenn ich den Umgang mit wirklich großen Datenmengen dann Neige ich zum
netcdf4-python
Edit:
Dann wieder auf die Datei zugreifen würden Sie:
Für mich, mit dem
-1
option incPickle.dump
Funktion verursacht die eingelegten Datei nicht belastbar sein danach.Dem Objekt ausgegeben ich durch
cPickle
war eine Instanzscipy.sparse.dok_matrix
.Nur zwei Argumente hat den trick für mich; Dokumentation über
pickle.dump()
Staaten den default-Wert derprotocol
parameter ist0
.Arbeiten an Windows 7, Python 2.7.2 (64 bit), und
cPickle
v 1.71.Beispiel: