साथ फ्लोटिंग प्वाइंट अपवाद मैं PyTables है कि मैं एक क्लस्टर पर पढ़ने का प्रयास कर रहा हूँ द्वारा उत्पन्न एक नहीं बल्कि बड़ी HDF5 फ़ाइल है। मैं न्यूमपी के साथ एक समस्या में भाग रहा हूं क्योंकि मैंने एक व्यक्तिगत खंड में पढ़ा है। के उदाहरण के साथ चलते हैं:Numpy और PyTables
भीतर में HDF5 फ़ाइल है सरणी के कुल आकार,
In [13]: data.shape
Out[13]: (21933063, 800, 3)
इस सरणी में प्रत्येक प्रविष्टि एक np.float64
है।
मैं प्रत्येक नोड हो रहा है आकार (21933063,10,3)
की स्लाइस पढ़ें। दुर्भाग्य से, NumPy एक ही समय में सभी 21 मिलियन subslices पढ़ने में असमर्थ प्रतीत होता है। मैं आकार (2193306,10,3)
के 10 स्लाइस में इन स्लाइस को विभाजित करने और फिर निम्न काम कर बातें प्राप्त करने के लिए कम करने का उपयोग करके यह क्रमिक रूप से करने की कोशिश की है:
In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i* \
chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
In [9]:
जहां 1 <= k <= 10
और chunksize = 2193306
। यह कोड k <= 9
के लिए काम करता है; अन्यथा मैं निम्नलिखित मिल:
In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i* \
chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
Floating point exception
[email protected] 00:00:00 ~
$
मैं वेलग्रिंड के memcheck
उपकरण का उपयोग क्या चल रहा है और ऐसा लगता है जैसे कि PyTables दोषी है यह पता लगाने की कोशिश की। ट्रेस में दिखाई देने वाली दो मुख्य फ़ाइलें libhdf5.so.6
और blosc
से संबंधित फ़ाइल हैं।
इसके अलावा, कि अगर मैं k=8
है, मैं पाने पर ध्यान दें:
In [12]: a.shape
Out[12]: (17546448, 10, 3)
लेकिन अगर मैं पिछले subslice संलग्न, मैं मिलता है:
In [14]: a = np.append(a,np.array(data[8*chunksize:9*chunksize,:10], \
dtype=np.float64))
In [15]: a.shape
Out[15]: (592192620,)
किसी को क्या करना है की किसी भी विचार है ? धन्यवाद!
क्या है त्रुटि है कि आप जब सीधे एक numpy सरणी में डाटा पढ़ने मिल सकता है? मैं सुझाव दूंगा कि आप कई एरे जोड़कर इसे बनाने की कोशिश करने के बजाय अपने गंतव्य सरणी को प्रीलोकेट करें। – DaveP