我在数据集中有一个大表,大约有4000万行。在Python中,使用h5py库读取文件非常快。但是,我需要在我的C ++代码中读取数据。所以我尝试了以下代码,但是当我运行它时它只是冻结(太慢)。我已经测试了大约1000行的小案例的代码,这很好。我不知道该怎么办。希望有人可以提供帮助非常感谢你。这是我的代码:
#define NFIELDS (hsize_t) 2
#define NRECORDS (hsize_t) 44169408
int main(){
hid_t file_id, dataset_id, group_id; /* identifiers */
herr_t status;
float dset_data[NRECORDS][NFIELDS];
file_id = H5Fopen("large.h5", H5F_ACC_RDONLY, H5P_DEFAULT);
dataset_id = H5Dopen(file_id, "ds", H5P_DEFAULT);
status = H5Dread(dataset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL,
H5P_DEFAULT, dset_data);
/* Close the dataset. */
H5Dclose(dataset_id);
/* Close the file. */
H5Fclose(file_id);
printf("OK\n");
for (int i =0; i< 44169408; ++i){
printf("%f, %f\n", dset_data[i][0], dset_data[i][1]);
}
return 0;
}
答案 0 :(得分:1)
您的代码看起来正确并且应该很快(假设文件中的数据也存储为浮点值,否则数据类型转换可能会减慢I / O的速度)。我打赌它会影响你的表现。