numpy

2012-04-25 5 views
6

के लिए डिस्क सरणी पर बड़ा मेरे पास एक स्पैस सरणी है जो मेमोरी (2000x2500000, फ्लोट) में प्रभावी ढंग से संभालने के लिए बहुत बड़ी प्रतीत होती है। मैं इसे एक स्पैस lil_array (scipy) में बना सकता हूं, लेकिन अगर मैं एक कॉलम या पंक्ति संपीड़ित स्पैस सरणी (A.tocsc(), A.tocsr()) आउटपुट करने का प्रयास करता हूं, तो मेरी मशीन मेमोरी से बाहर हो जाती है (और इसके बीच भी एक गंभीर मेल नहीं है टेक्स्ट फ़ाइल 4.4 जी और पिकेलड लिल सरणी 12 जी में डेटा - यह डिस्क प्रारूप होना अच्छा होगा जो कच्चे डेटा आकार को अधिक निकटता से अनुमानित करता है)।numpy

मैं शायद भविष्य में भी बड़े सरणी का संचालन कर रहा हूं।

प्रश्न: डिस्क सरणी पर बड़े पैमाने पर संभालने का सबसे अच्छा तरीका क्या है कि मैं पारदर्शी तरीके से नियमित संख्यात्मक कार्यों का उपयोग कर सकता हूं। उदाहरण के लिए, पंक्तियों और स्तंभों, वेक्टर उत्पादों, अधिकतम, मिनट, टुकड़ा आदि के साथ रकम?

क्या पैटबेल जाने का रास्ता है? क्या एक अच्छी (तेज़) एसक्यूएल-न्यूपी मिडलवेयर परत है? डिस्क सरणी पर एक रहस्य numpy में बनाया गया?

अतीत में (थोड़ा छोटा) सरणी में मैंने हमेशा डिस्क पर लंबे समय तक गणना किए गए परिणामों को पिकेल-कैश किया है। यह तब काम करता है जब सरणी < 4 जी या तो समाप्त हो जाती है लेकिन अब अधिक योग्य नहीं है।

+0

जब आपने अपनी सरणी उठाई, तो क्या आपने बाइनरी प्रोटोकॉल का उपयोग करना सुनिश्चित किया? यदि आप डिफ़ॉल्ट टेक्स्ट प्रोटोकॉल का उपयोग कर रहे हैं, तो यह विशाल फ़ाइल आकार का कारण हो सकता है। – DaveP

उत्तर

2

मैं बहु-गीगाबाइट संख्यात्मक मैट्रिक्स को संसाधित करने के लिए अक्सर memory-mapped numpy arrays का उपयोग करता हूं। मैं उन्हें अपने उद्देश्यों के लिए वास्तव में अच्छी तरह से काम करने के लिए मिलता है। जाहिर है, यदि डेटा का आकार रैम की मात्रा से अधिक है, तो thrashing से बचने के लिए किसी को पहुंच पैटर्न के बारे में सावधान रहना होगा।

+0

यह करने योग्य हो सकता है लेकिन स्पैर सरणी के लिए बहुत अक्षम लगता है। क्या कोई स्पैस संस्करण है? –

+0

@ एंथनीबाक: मुझे नहीं पता कि मुझे पता है। हालांकि, 'float32' का 2000x100000 घना सरणी केवल 800 एमबी आकार (डिस्क और स्मृति दोनों में) है। – NPE

+0

हां, मेरे मूल प्रश्न में एक टाइपो था। यह 2000x2500000 कहा जाना चाहिए था। –