2011-03-02 11 views
8

मैं एक निर्गम अजगर में विरल मैट्रिक्स का उपयोग करते हुए, मैं अपने हार्ड डिस्क में यह विरल मैट्रिक्स स्टोर करने के लिए की जरूरत है, मैं इसे कैसे कर सकते हैं मिल गया है? अगर मुझे डेटाबेस बनाना चाहिए तो मुझे कैसे करना चाहिए ??पायथन: आप पाइथन का उपयोग करके एक स्पैर मैट्रिक्स कैसे स्टोर करते हैं?

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() 

मैं एक फ़ाइल में इस "चटाई" स्टोर करने के लिए और मैट्रिक्स समन्वय का उपयोग करने का मूल्य का उपयोग करना चाहिए की जरूरत है ..

विरल मैट्रिक्स के परिणाम की तरह है: यह मेरा कोड है इस: `विरल मैट्रिक्स के परिणाम इस तरह हैं:

(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 

लेकिन जब मैं इसे एक फ़ाइल में संग्रहीत करने और एक ही मैं इस तरह यह हो रही है पढ़ें:

(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 
+3

आप मन में एक विशेष डेटाबेस है? इन matrices का आकार क्या है? क्या आपने स्क्लाइट माना है (जिसे पाइथन ने अंतर्निहित समर्थन दिया है)? – NullUserException

+0

मैं एक नौसिखिया हूं, मुझे बहुत कुछ पता नहीं है, ठीक है, मैं बस अपने मैट्रिक्स को हार्डडिस्क में स्टोर करने का समाधान ढूंढने की कोशिश कर रहा हूं, मैं प्रोग्राम को फिर से मैट्रिक्स बनाने के लिए नहीं चलाऊंगा, अगर मैं कर सकता हूं मैट्रिक्स को स्टोर करें, मैं अगली बार मूल्यों के लिए मैट्रिक्स का संदर्भ दे सकता हूं .. कृपया मुझे सुझाव दें .. धन्यवाद :) –

+1

कृपया अपने कोड को प्रारूपित करने के लिए निम्नलिखित देखें, इसलिए यह पठनीय है: http://stackoverflow.com/editing-help, लेकिन मूल रूप से केवल कोड की प्रत्येक पंक्ति से पहले 4 रिक्त स्थान डालें और फिर इंडेंट करें क्योंकि आप अन्यथा यह सुनिश्चित कर लेंगे कि आप कोड और किसी सामान्य टेक्स्ट के बीच एक खाली रेखा छोड़ दें। – JoshAdel

उत्तर

4

नोट: इस सवाल का जवाब संशोधित सवाल है कि अब कोड प्रदान करता है के जवाब में है।

आप अपने समारोह में cPickle.dump() नहीं बुलाना चाहिए। स्पैर मैट्रिक्स बनाएं और फिर फ़ाइल में अपनी सामग्री डंप करें।

प्रयास करें:

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 


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 = open('spmatrix.pkl','wb') 
cPickle.dump(mat,f,-1) 
f.close() 
+1

यह कोड त्रुटियों के बिना चलता है वास्तव में यह फ़ाइल को मैट्रिक्स को एक भाग छोड़कर आउटपुट करता है! .. मैं इस कमांड का उपयोग करने में सक्षम नहीं हूं .. 'mat.dump ('output.mat') 'जहां' mat' मेरा मैट्रिक्स है .. यह त्रुटि है जिसे मैं 'एट्रिब्यूट एरर, एटआर +" नहीं मिला हूं, " विशेषताएँ त्रुटि: डंप नहीं मिला' –

+3

आपको लगता है अब कुछ अन्य विधि का उपयोग कर रहे हैं क्योंकि mat.dump() आपके कोड में या मेरे सुझाव में प्रकट नहीं होता है। मैं क्षमा चाहता हूं, लेकिन मेरे पास आगे आपकी मदद करने का समय नहीं है। शुभकामनाएँ। – JoshAdel

2

pyTables HDF5 डाटा मॉडल के लिए अजगर इंटरफेस है और के लिए बहुत लोकप्रिय विकल्प और NumPy और SciPy के साथ अच्छी तरह से एकीकृत है। pyTables आपको पूरे सरणी को स्मृति में वापस लोड करने की आवश्यकता के बिना डेटाबेस एरे के स्लाइस तक पहुंचने देगा।

मैं विरल मैट्रिक्स से प्रति और एक त्वरित गूगल न तो पुष्टि की और न ही इनकार किया है कि विरल मैट्रिक्स का समर्थन कर रहे खोज के साथ किसी भी विशिष्ट अनुभव नहीं है।

6

मान लें कि आप एक numpy matrix या ndarray है, जो अपने प्रश्न और टैग मतलब है, वहाँ है एक dump विधि और load समारोह आप का उपयोग कर सकते हैं:

your_matrix.dump('output.mat') 
another_matrix = numpy.load('output.mat') 
+0

तो क्या मैं इस आउटपुट.मैट का उपयोग किसी भी समय अन्य कार्यक्रमों में कर सकता हूं ?? –

+0

हां। यह आपके हार्ड ड्राइव पर किसी भी फ़ाइल का पथ है जहां आप डेटा स्टोर करना चाहते हैं। – ide

2

HDF5 समर्थन पर जोड़ा जा रहा है, अजगर भी NetCDF support है जो मैट्रिक्स फॉर्म डेटा स्टोरेज और स्पैस और घने दोनों त्वरित पहुंच के लिए आदर्श है। यह खिड़कियां है, जो अजगर के वैज्ञानिक उपयोगकर्ताओं का एक बहुत कुछ के साथ अंत के लिए Python-x,y में शामिल है।

अधिक numpy आधारित उदाहरण इस cookbook में पाया जा सकता।

2

क्लस्टर पर बहुत बड़े स्पैस मैट्रिस के लिए, आप पाइरिटिलिनो का उपयोग कर सकते हैं, इसमें एक एचडीएफ 5 इंटरफ़ेस है जो डिस्क पर एक स्पैर मैट्रिक्स को डंप कर सकता है, और मैट्रिक्स को विभिन्न नोड्स पर वितरित किया जाता है।

import cPickle 
f = open('spmatrix.pkl','wb') 
cPickle.dump(your_matrix,f,-1) 
f.close() 

अगर मैं वास्तव में बड़े डेटासेट के साथ काम कर रहा हूँ तो मैं का उपयोग करते हैं:

http://trilinos.sandia.gov/packages/pytrilinos/development/EpetraExt.html#input-output-classes

2

विरल मैट्रिक्स के आकार पर निर्भर करता है, मैं तो बस cPickle उपयोग करने के लिए सरणी अचार के लिए करते हैं netcdf4-python

संपादित करें:

तो करने के लिए फिर से फाइल का उपयोग क्या तुम करोगी:

f = open('spmatrix.pkl','rb') # open the file in read binary mode 
# load the data in the .pkl file into a new variable spmat 
spmat = cPickle.load(f) 
f.close() 
+0

बहुत बहुत धन्यवाद :) :) यदि आप बता सकते हैं कि उस spmatrix.pkl को कैसे पहुंचाया जाए तो यह बहुत मददगार होगा .. धन्यवाद फिर से :) –

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद :) –

+0

यह फ़ाइल में वास्तविक इनपुट है (0, 148) \t 1,0 (1, 48) \t 1,0 (1, 173) \t 1,0 (2, 173) \t 1,0 (3, 168) \t 1,0 (4, 61) \t 1,0 (4, 91) \t 1,0 (5, 136) \t 1,0 (6, 237) \t 2,0 (7, 111) \t 1.0 ख केन्द्र शासित प्रदेशों के .pkl फ़ाइल मैं हो रही है से डेटा (0, 148) \t 1,0 (0, 48) \t 1,0 (0, 173) \t 1,0 (0, 173) को पढ़ने के बाद \t 1.0 (0, 168) \t 1.0 (0, 61) \t 1,0 (0, 91) \t 1,0 (0, 136) \t 1,0 (0, 237) \t 2,0 (0, 111) \t 1.0 क्या त्रुटि मैं किया है है जैसा कि आपने निर्देश दिया है :( –

2

मेरे लिए, cPickle.dump समारोह में -1 विकल्प का उपयोग करने के कारण होता है मसालेदार फ़ाइल बाद में लोड करने योग्य नहीं माना जाता है।

ऑब्जेक्ट मैं cPickle के माध्यम से डंप किया गया scipy.sparse.dok_matrix का एक उदाहरण था।

केवल दो तर्कों का उपयोग करके मेरे लिए चाल थी; documentation के बारे में pickle.dump() बताता है कि पैरामीटर का डिफ़ॉल्ट मान 0 है।

विंडोज 7, पायथन 2.7.2 (64 बिट्स), और cPickle वी 1.71 पर काम करना।

उदाहरण:

>>> import cPickle 
>>> print cPickle.__version__ 
1.71 
>>> from scipy import sparse 
>>> H = sparse.dok_matrix((135, 654), dtype='int32') 
>>> H[33, 44] = 8 
>>> H[123, 321] = -99 
>>> print str(H) 
    (123, 321) -99 
    (33, 44) 8 
>>> fname = 'dok_matrix.pkl' 
>>> f = open(fname, mode="wb") 
>>> cPickle.dump(H, f) 
>>> f.close() 
>>> f = open(fname, mode="rb") 
>>> M = cPickle.load(f) 
>>> f.close() 
>>> print str(M) 
    (123, 321) -99 
    (33, 44) 8 
>>> M == H 
True 
>>> 
संबंधित मुद्दे