क्या यह जानना संभव है कि एचडीएफ 5 प्रारूप में संग्रहीत एक मैट्रिक्स RowMajor या ColMajor में है या नहीं? उदाहरण के लिए जब मैं ऑक्टेट से मैट्रिस को सहेजता हूं, जो उन्हें आंतरिक रूप से ColMajor के रूप में संग्रहीत करता है, तो मुझे उन्हें अपने सी कोड में पढ़ने के दौरान उन्हें स्थानांतरित करने की आवश्यकता होती है जहां MatMices RowMajor में संग्रहीत किया जाता है, और इसके विपरीत। पंक्ति प्रमुख क्रम मेंएचडीएफ 5 rowmajor या colmajor
उत्तर
HDF5 भंडार डेटा:
HDF5 सी भंडारण सम्मेलनों का उपयोग करता है, यह सोचते हैं कि पिछले सूचीबद्ध आयाम सबसे तेजी से बदल रहा है आयाम और प्रथम सूचीबद्ध आयाम है धीरे बदलते है।
हालांकि, यदि आप ऑक्टेव के अंतर्निहित एचडीएफ 5 इंटरफ़ेस का उपयोग कर रहे हैं, तो यह स्वचालित रूप से आपके लिए सरणी को स्थानांतरित कर देगा। आम तौर पर, एचडीएफ 5 फाइल में डेटा वास्तव में कैसे लिखा जाता है, अंत उपयोगकर्ता के लिए पूरी तरह से अपारदर्शी होना चाहिए, और इंटरफ़ेस को सरणी क्रम में अंतरों से निपटना चाहिए, आदि
@Yossarian ने बताया। एचडीएफ 5 हमेशा डेटा को पंक्ति-प्रमुख (सी सम्मेलन) के रूप में संग्रहीत करता है। ऑक्टवे फोर्ट्रान के समान है और आंतरिक रूप से कॉलम-प्रमुख के रूप में डेटा स्टोर करता है।
ऑक्टेव से मैट्रिक्स लिखते समय, एचडीएफ 5 परत आपके लिए स्थानांतरित करती है, इसलिए इसे हमेशा पंक्ति-प्रमुख के रूप में लिखा जाता है चाहे आप किस भाषा का उपयोग करें। यह फ़ाइल की पोर्टेबिलिटी प्रदान करता है।
@Yossarian द्वारा उल्लिखित एचडीएफ 5 उपयोगकर्ता के गाइड अनुभाग 7.3.2.5 में एक बहुत अच्छा उदाहरण है। यहाँ उदाहरण है (लगभग) सप्टक का उपयोग कर reproduced:
octave:1> A = [ 1:3; 4:6 ]
A =
1 2 3
4 5 6
octave:2> save("-hdf5", "test.h5", "A")
octave:3> quit
~$ h5dump test.h5
HDF5 "test.h5" {
GROUP "/" {
COMMENT "# Created by Octave 3.6.4, Fri Jun 13 08:36:16 2014 MDT <[email protected]>"
GROUP "A" {
ATTRIBUTE "OCTAVE_NEW_FORMAT" {
DATATYPE H5T_STD_U8LE
DATASPACE SCALAR
DATA {
(0): 1
}
}
DATASET "type" {
DATATYPE H5T_STRING {
STRSIZE 7;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "matrix"
}
}
DATASET "value" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { (3, 2)/(3, 2) }
DATA {
(0,0): 1, 4,
(1,0): 2, 5,
(2,0): 3, 6
}
}
}
}
}
सूचना कैसे HDF5 परत मैट्रिक्स स्थानांतरित किया है यकीन है कि यह पंक्ति-प्रमुख प्रारूप में संग्रहीत किया जाता है बनाने के लिए।
फिर सी में इसे पढ़ने का एक उदाहरण:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hdf5.h>
#define FILE "test.h5"
#define DS "A/value"
int
main(int argc, char **argv)
{
int i = 0;
int j = 0;
int n = 0;
int x = 0;
int rank = 0;
hid_t file_id;
hid_t space_id;
hid_t dset_id;
herr_t stat;
hsize_t *dims = NULL;
int *data = NULL;
file_id = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
dset_id = H5Dopen(file_id, DS, dset_id);
space_id = H5Dget_space(dset_id);
n = H5Sget_simple_extent_npoints(space_id);
rank = H5Sget_simple_extent_ndims(space_id);
dims = malloc(rank*sizeof(int));
stat = H5Sget_simple_extent_dims(space_id, dims, NULL);
printf("rank: %d\t dimensions: ", rank);
for (i = 0; i < rank; ++i) {
if (i == 0) {
printf("(");
}
printf("%llu", dims[i]);
if (i == (rank -1)) {
printf(")\n");
} else {
printf(" x ");
}
}
data = malloc(n*sizeof(int));
memset(data, 0, n*sizeof(int));
stat = H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
data);
printf("%s:\n", DS);
for (i = 0; i < dims[0]; ++i) {
printf(" [ ");
for (j = 0; j < dims[1]; ++j) {
x = i * dims[1] + j;
printf("%d ", data[x]);
}
printf("]\n");
}
stat = H5Sclose(space_id);
stat = H5Dclose(dset_id);
stat = H5Fclose(file_id);
return(EXIT_SUCCESS);
}
जब संकलित करने और चलाने देता है:
~$ h5cc -o rmat rmat.c
~$ ./rmat
rank: 2 dimensions: (3 x 2)
A/value:
[ 1 4 ]
[ 2 5 ]
[ 3 6 ]
यह महान के रूप में यह मतलब है मैट्रिक्स स्मृति में अनुकूलित भंडारित हो जाता है। इसका मतलब यह है कि यद्यपि आपको यह बदलना है कि आप अपनी गणना कैसे करते हैं। पंक्ति-प्रमुख के लिए आपको पूर्व-गुणा करने की आवश्यकता है, जबकि स्तंभ-प्रमुख के लिए आपको पोस्ट-गुणा करना चाहिए। यहां एक example है, उम्मीद है कि यह थोड़ा स्पष्ट समझाया गया है।
क्या इससे मदद मिलती है?
Thx।लेकिन आपके उदाहरण के आधार पर, एचडीएफ 5 रोमोजर में मैट्रिक्स को स्टोर नहीं करता है: कोल्मोजर में ऑक्टेव मेमोरी में मैट्रिक्स 'ए', 1 डी वेक्टर के रूप में दिखाई देगा, जिसमें मूल्य '{1,4,2,5,3,6 } '। इसके अलावा, मंद [0] = 2 और dim1 [1] = 3। जब आप सी प्रोग में ए पढ़ते हैं, तो मैट्रिक्स पढ़ने में मिश्रित आयाम होते हैं, और रोमोजर, 1 डी मेमोरी पढ़ने के समतुल्य समतुल्य मैट्रिक्स भी {1,4,2,5,3,6} है। मुझे उम्मीद है कि '{1,2,3,4,5,6}'। कम से कम, मैं एचडीएफ 5 फाइल में कुछ संकेतों की अपेक्षा करता हूं कि मैट्रिक्स कॉफ़ के लिए मेमोरी लेआउट लिखते समय पंक्ति या कॉल प्रमुख को अच्छी तरह से पढ़ने के लिए। – remi
- 1. एचडीएफ 5
- 2. एक एचडीएफ 5 डेटासेट
- 3. एचडीएफ 5/सी ++
- 4. एचडीएफ 5 स्टोरेज ओवरहेड
- 5. एचडीएफ 5 उदाहरण कोड
- 6. एचडीएफ 5 सी कोड पीढ़ी
- 7. आर और एचडीएफ 5 समस्याएं
- 8. एचडीएफ 5 दर्शक/संपादक लिनक्स
- 9. एचडीएफ 5 फाइल से जानकारी हटाने
- 10. एचडीएफ 5 फ़ाइल से डेटा को हटाने
- 11. कैफे एचडीएफ 5 पिक्सेल-वार वर्गीकरण
- 12. पांडा में एचडीएफ 5 स्ट्रिंग क्रमबद्धता विवरण?
- 13. चंकित एचडीएफ 5 डेटासेट और स्लैबसाइज
- 14. क्यों अगर मैं एचडीएफ 5 में कई खाली पांडस श्रृंखला डालता हूं तो एचडीएफ 5 का आकार इतना बड़ा है?
- 15. एचडीएफ 5 फाइल को अन्य प्रारूपों में कनवर्ट करें
- 16. क्या वास्तविक समय माप के लिए एचडीएफ 5 उपयुक्त है
- 17. दो बड़े पांडा को सम्मिलित करें। एचडीएफस्टोर एचडीएफ 5 फाइलें
- 18. वैज्ञानिक सिमुलेशन डेटा, मोंगोड + एचडीएफ 5 की डेटा निरंतरता?
- 19. एचडीएफ 5 सी ++ इंटरफ़ेस: गतिशील 2 डी सरणी लिखना
- 20. बड़ी संख्या में एचडीएफ 5 फाइलों को संगत करें
- 21. एचडीएफ 5 फ़ाइल और पीईटेबल्स फ़ाइल के बीच अंतर
- 22. एचडीएफ 5: निम्न स्तर बनाम निम्न स्तर इंटरफेस। h5py
- 23. शर्तों के साथ pdas डेटाफ्रेम को एचडीएफ 5 फ़ाइल पढ़ें
- 24. Google प्रोटोकॉल बफर, एचडीएफ 5, न्यूपी तुलना (डेटा स्थानांतरित करना)
- 25. पाइथन एचडीएफ 5 एच 5 पीई कई फाइलें खोलने के मुद्दे
- 26. एसक्यूलाइट और एचडीएफ 5 प्रारूपों में numpy, scipy से निर्यात/आयात करने के लिए
- 27. क्या एचडीएफ 5 या डिस्क जैसे डेटा डेटा द्वारा स्केलर मॉडल को प्रशिक्षित करने का कोई तरीका है?
- 28. लोडिंग मैटलैब स्पैर मैट्रिक्स -व 7.3 (एचडीएफ 5) के साथ पाइथन में सहेजा गया और
- 29. सी ++ के साथ एचडीएफ 5 डेटासेट में स्ट्रिंग कैसे संलग्न करें?
- 30. `पीआईपी इंस्टॉल टेबल 'त्रुटि के साथ असफल :: स्थानीय एचडीएफ 5 इंस्टॉलेशन नहीं मिला
तो जब मैंने ऑक्टेट से निर्यात किए गए डेटा को पढ़ा और उन्हें ट्रांसफर किया गया तो यह इस तथ्य के कारण है कि ऑक्टेव एचडीएफ 5 सम्मेलनों का पालन नहीं करता है, है ना? – remi
इसे पढ़ने के लिए आप क्या उपयोग कर रहे हैं? – Yossarian
मैं अपने द्वारा लिखित सी ++ में एक कोड का उपयोग कर रहा हूं। मैंने बस डेटासेट आयाम पढ़ा है और फिर मानों को पढ़ा है। – remi