Python: comment stocker une matrice creuse à l'aide de python?
J'ai une sortie à l'aide de matrices creuses en python, j'ai besoin de stocker cette matrice creuse dans mon disque dur, comment puis-je le faire? si je dois créer une base de données, puis comment dois-je faire??
c'est mon 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()
J'ai besoin de stocker ce "tapis" dans un fichier et devrait accéder à la valeur de la matrice en utilisant les coordonnées..
résultat de la matrice creuse est comme ceci: "le résultat de matrices creuses sont comme ceci:
(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
mais quand je le stocker dans un fichier et de lire la même chose, je suis comme ça:
(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
Avez-vous une base de données particulière en tête? Quelle est la taille de ces matrices? Avez-vous envisagé de sqlite (qui Python a un support intégré pour)?
je suis un débutant, je ne connais pas trop, eh bien, je suis juste essayer de trouver une solution pour stocker mes matrice de disque dur, je ne veux pas d'exécuter le programme pour produire la matrice de nouveau et de nouveau, si je peux stocker la matrice je peux juste référence à la matrice des valeurs de la prochaine fois.. pls me suggérer.. merci 🙂
Veuillez voir les rubriques suivantes pour formater votre code de sorte qu'il est lisible: stackoverflow.com/editing-help, mais fondamentalement, il suffit de mettre 4 espaces avant chaque ligne de code, puis tiret comme vous le feriez autrement, assurez-vous de laisser une ligne vide entre code et de texte normal.
je suis un débutant, je ne connais pas trop, eh bien, je suis juste essayer de trouver une solution pour stocker mes matrice de disque dur, je ne veux pas d'exécuter le programme pour produire la matrice de nouveau et de nouveau, si je peux stocker la matrice je peux juste référence à la matrice des valeurs de la prochaine fois.. pls me suggérer.. merci 🙂
Veuillez voir les rubriques suivantes pour formater votre code de sorte qu'il est lisible: stackoverflow.com/editing-help, mais fondamentalement, il suffit de mettre 4 espaces avant chaque ligne de code, puis tiret comme vous le feriez autrement, assurez-vous de laisser une ligne vide entre code et de texte normal.
OriginalL'auteur Bhuvan raj | 2011-03-02
Vous devez vous connecter pour publier un commentaire.
Note: Cette réponse est une réponse à la réviser question qui offre code.
Vous ne devez pas appeler
cPickle.dump()
dans votre fonction. Créer la matrice creuse et vider son contenu dans le fichier.Essayer:
mat.dump('output.mat')
oùmat
est mon matrice.. C'est l'erreur, je suis la rechercheraise AttributeError, attr + " not found" AttributeError: dump not found
Vous semblez être en utilisant une autre méthode maintenant comme mat.dump() n'apparaît pas dans votre code ou dans ma suggestion. Je m'excuse, mais je n'ai pas le temps de vous aider davantage. Le meilleur de la chance.
OriginalL'auteur JoshAdel
En supposant que vous avez un numpy
matrix
oundarray
, votre question et balises implique, il y a undump
méthode etvide
fonction que vous pouvez utiliser:Oui. C'est juste le chemin d'accès à tous les fichiers sur votre disque dur où vous souhaitez stocker les données.
OriginalL'auteur ide
pyTables est le Python interface HDF5 modèle de données et est très populaire et bien intégrée, avec NumPy et SciPy. pyTables vous permettra d'accéder à des tranches de la base de données des tableaux sans avoir besoin de charger l'intégralité de la matrice de retour dans sa mémoire.
Je n'ai pas d'expérience spécifique avec des matrices creuses en soi et une recherche rapide sur Google ni confirmé ni nié que les matrices creuses sont pris en charge.
OriginalL'auteur Paul
En ajoutant la HDF5 soutien, Python a également NetCDF soutien qui est idéal pour la forme de matrice de stockage de données et l'accès rapide à la fois rare et dense. Il est inclus dans Python-x,y pour windows, dont beaucoup de scientifiques des utilisateurs de python à la fin avec l'.
Plus numpy exemples peuvent être trouvés dans ce livre de recettes.
OriginalL'auteur whatnick
Très grandes matrices creuses sur les clusters, vous pouvez utiliser pytrilinos, il a un HDF5 interface qui peut générer une matrice creuse sur le disque, et fonctionne également si la matrice est distribué sur les différents nœuds.
http://trilinos.sandia.gov/packages/pytrilinos/development/EpetraExt.html#input-output-classes
OriginalL'auteur Andrea Zonca
En fonction de la taille de la matrice creuse, j'ai tendance à n'utiliser que la
cPickle
pour mariner le tableau:Si je m'occupe vraiment de grands ensembles de données, puis j'ai tendance à utiliser
netcdf4-python
Edit:
Accéder à nouveau le fichier:
merci beaucoup pour u de l'aide:)
c'est la véritable entrée dans le fichier (0, 148) 1.0 (1, 48) 1.0 (1, 173) 1.0 (2, 173) 1.0 (3, 168) 1.0 (4, 61) 1.0 (4, 91) 1.0 (5, 136) 1.0 (6, 237) 2.0 (7, 111) 1.0 mais après la lecture des données à partir de .pkl fichier j'obtiens (0, 148) 1.0 (0, 48) 1.0 (0, 173) 1.0 (0, 173) 1.0 (0, 168) 1.0 (0, 61) 1.0 (0, 91) 1.0 (0, 136) 1.0 (0, 237) 2.0 (0, 111) 1.0 quelle est l'erreur que j'ai fait comme u avez demandé 🙁
Je ne comprends pas ce que votre entrée est. Est-il un texte dans un fichier que vous lisez en python? Veuillez fournir les exact le code que vous avez utilisé pour générer le cornichon. Il est probablement mieux si vous modifiez la question d'origine de sorte que vous pouvez mettre en forme le code correctement.
Merci de mettre le code dans votre question initiale à l'aide de la bonne stackoverflow mise en forme, de sorte que je peux effectivement lire ce que vous avez écrit
OriginalL'auteur JoshAdel
Pour moi, en utilisant le
-1
option danscPickle.dump
fonction causé la marinés fichier pour ne pas être chargeable par la suite.L'objet que je sous-évaluées par le biais de
cPickle
était une instance descipy.sparse.dok_matrix
.À l'aide de seulement deux arguments a fait le tour pour moi; la documentation sur
pickle.dump()
les états la valeur par défaut de laprotocol
paramètre est0
.De travail sur Windows 7, Python 2.7.2 (64 bits), et
cPickle
v 1.71.Exemple:
OriginalL'auteur EricP