HDF5 समूह के मैनुअल में कुछ HDF5 उदाहरणों में बाइट क्रम स्पष्ट रूप से 'छोटे एंडियन' पर सेट है। कुछ अन्य उदाहरणों में कोई स्पष्ट परिभाषा नहीं दी गई है। मेरा सवाल अब है, क्या मुझे बाइट ऑर्डर की परवाह करने की ज़रूरत है? क्या मैं इसे निर्दिष्ट नहीं कर सकता, और डिफ़ॉल्ट पर भरोसा कर सकता हूं?

एक उदाहरण जिसमें बाइट क्रम स्पष्ट रूप से निर्दिष्ट है:

DataSpace dataspace( RANK, dimsf );

IntType datatype( PredType::NATIVE_INT );
datatype.setOrder( H5T_ORDER_LE );

DataSet dataset = file.createDataSet( DATASET_NAME, datatype, dataspace );

क्या होगा अगर मैं सिर्फ निम्नलिखित का उपयोग करता हूं?

DataSpace dataspace( RANK, dimsf );

DataSet dataset = file.createDataSet( DATASET_NAME, PredType::NATIVE_INT, dataspace );

(मैंने सत्यापित किया है कि दोनों संकलित और चलते हैं, और यदि मैं HDFView और h5py के साथ पढ़ता हूं तो वही डेटा देता हूं)

1
Tom de Geus 4 जिंदा 2018, 12:19

2 जवाब

सबसे बढ़िया उत्तर

डेटा लिखते और पढ़ते समय, HDF5 लाइब्रेरी दो डेटाटाइप्स पर विचार करती है, एक डिस्क पर मेमोरी में।

उदाहरण के लिए, H5Dread के दस्तावेज़ पर विचार करें:

(आंशिक) डेटासेट की मेमोरी डेटाटाइप को पहचानकर्ता mem_type_id द्वारा पहचाना जाता है। (...) डेटाटाइप रूपांतरण पढ़ने या लिखने के समय होता है और स्वचालित होता है।

"डिस्क पर" डेटाटाइप का अनुमान डेटासेट के मेटाडेटा से लगाया जाएगा। इसे उपयोगकर्ता मार्गदर्शिका में भी समझाया गया है, देखें डेटा ट्रांसफर पाइपलाइन (जहां संबंधित भाग आरेख में "रूपांतरित" है) और rel="nofollow noreferrer"> विवरण।

इसलिए, डेटा पढ़ते समय, आपको "डिस्क पर" क्या है, इसकी परवाह करने की आवश्यकता नहीं है, इसे एचडीएफ 5 द्वारा नियंत्रित किया जाएगा (एंडियननेस सहित)।

एक और परिवर्तन तब होगा जब आप H5Dwrite को कॉल करते समय 64-बिट फ़्लोट को 32-बिट फ़्लोट डेटासेट में स्टोर करते हैं।

डेटा लिखते समय, आप या तो HDF5 द्वारा प्रदान किए गए मूल प्रकार का चयन कर सकते हैं या यदि आपके पास भंडारण प्रकार पर बाधाएं हैं तो कोई अन्य। मैं सी, फोरट्रान और पायथन से वर्षों से एचडीएफ 5 का उपयोग करता हूं और इसके बारे में कभी भी चिंता करने की ज़रूरत नहीं है। (खैर, HDF5 में कई अवधारणाओं को समझने की लंबी अवधि के बाद)।

1
Pierre de Buyl 9 जिंदा 2018, 15:14

यह एक निश्चित उत्तर नहीं है, लेकिन मुझे इसे साझा करना उचित लगा (और यह एक टिप्पणी के लिए बहुत अधिक है):

HDF5 उपयोगकर्ता मार्गदर्शिका अध्याय 6 HDF5 डेटाटाइप से:

2.3 डेटा स्थानांतरण (पढ़ें और लिखें)

संभवतः डेटाटाइप का सबसे आम उपयोग डेटासेट या विशेषता से डेटा लिखना या पढ़ना है। इन परिचालनों में, प्रत्येक डेटा तत्व को स्रोत से गंतव्य तक स्थानांतरित किया जाता है (संभवतः तत्वों के क्रम को पुनर्व्यवस्थित करना)। चूंकि स्रोत और गंतव्य को समान होने की आवश्यकता नहीं है (यानी, एक डिस्क है और दूसरा मेमोरी है) स्थानांतरण के लिए स्रोत तत्व और गंतव्य तत्व दोनों के प्रारूप की आवश्यकता होती है। इसलिए, डेटा ट्रांसफर स्रोत और गंतव्य के लिए दो डेटाटाइप ऑब्जेक्ट्स का उपयोग करता है।

जब डेटा लिखा जाता है, तो स्रोत मेमोरी होता है और गंतव्य डिस्क (फ़ाइल) होता है। मेमोरी डेटाटाइप मशीन मेमोरी में डेटा तत्व के प्रारूप का वर्णन करता है, और फ़ाइल डेटाटाइप डिस्क पर डेटा तत्व के वांछित प्रारूप का वर्णन करता है। इसी तरह, पढ़ते समय, स्रोत डेटाटाइप डिस्क पर डेटा तत्व के प्रारूप का वर्णन करता है, और गंतव्य डेटाटाइप मेमोरी में प्रारूप का वर्णन करता है।

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

यह पहले टिप्पणियों में बताई गई बातों के विपरीत नहीं है ...

1
Scheff 4 जिंदा 2018, 12:55