के साथ hdf5 को incremental लिखता है मुझे यह प्रश्न है कि python/h5py के साथ hdf5 फ़ाइलों को कैसे लिखना है। के बारे में 10^4 कॉलम, और लगभग 10^7 पंक्तियों के साथh5py
-----------------------------------------
| timepoint | voltage1 | voltage2 | ...
-----------------------------------------
| 178 | 10 | 12 | ...
-----------------------------------------
| 179 | 12 | 11 | ...
-----------------------------------------
| 185 | 9 | 12 | ...
-----------------------------------------
| 187 | 15 | 12 | ...
...
:
मैं की तरह डेटा है। (यह लगभग 10^11 (100 अरब) तत्व है, या ~ बाइट इनट के साथ ~ 100 जीबी)।
इस डेटा के साथ, सामान्य उपयोग एक बार बहुत अधिक लिखता है, कई बार पढ़ता है, और सामान्य पठन केस कॉलम 1 और एक और कॉलम (254 कहें) को पकड़ने के लिए होगा, दोनों स्तंभों को स्मृति में लोड करें, और कुछ फैंसी आंकड़े करें ।
मुझे लगता है कि उपरोक्त तालिका में प्रत्येक कॉलम एक एचडीएफ 5 समूह होगा, जिसके परिणामस्वरूप 10^4 समूह होंगे। इस तरह हमें सभी डेटा को स्मृति में पढ़ने की आवश्यकता नहीं होगी, हां? एचडीएफ 5 संरचना अभी तक परिभाषित नहीं है, इसलिए यह कुछ भी हो सकता है।
अब प्रश्न: मुझे एक समय में डेटा ~ 10^4 पंक्तियां प्राप्त होती हैं (और प्रत्येक बार पंक्तियों की समान संख्या नहीं), और इसे HDF5 फ़ाइल में वृद्धिशील रूप से लिखने की आवश्यकता होती है। मैं उस फाइल को कैसे लिखूं?
मैं अजगर और h5py पर विचार कर रहा हूं, लेकिन अगर कोई अन्य उपकरण अनुशंसित हो सकता है। जाने के रास्ते को तोड़ रहा है, उदाहरण के साथ
dset = f.create_dataset("voltage284", (100000,), maxshape=(None,), dtype='i8', chunks=(10000,))
और फिर जब 10^4 पंक्तियों का एक और ब्लॉक आता है, तो डेटासेट को प्रतिस्थापित करें?
या क्या यह अलग-अलग डेटासेट के रूप में 10^4 पंक्तियों के प्रत्येक ब्लॉक को स्टोर करना बेहतर है? या क्या मुझे वास्तव में पंक्तियों की अंतिम संख्या जानने की ज़रूरत है? (यह पाने के लिए मुश्किल हो जाएगा, लेकिन शायद संभव है)।
अगर मैं नौकरी के लिए सही उपकरण नहीं हूं तो मैं hdf5 पर जमानत कर सकता हूं, हालांकि मुझे लगता है कि एक बार अजीब लिखने के बाद, यह अद्भुत होगा।
dtype = 'i8' एक चीज़ है? मुझे लगता है कि 'int8' 8 बिट्स है, लेकिन i8 बड़ा लगता है। – user116293
'i8' 8-बाइट इंट्स के लिए हैं। आप 'np.dtype ('i8') का उपयोग करके बाइट आकार की जांच कर सकते हैं। Itemize'। यदि आप 1-बाइट इनट्स चाहते हैं, तो 'np.int8' (उर्फ' 'i1'') का उपयोग करें। – unutbu