2014-09-21 35 views
-1

我在數據集中有一個大表約4000萬行。在Python中,使用h5py庫讀取文件非常快。不過,我需要在我的C++代碼中進行讀取。所以我嘗試了下面的代碼,但是當我運行它時它會凍結(太慢)。我已經測試了大約1000行的較小案例的代碼,這很好。我不知道該怎麼辦。希望任何人都能幫忙。非常感謝你。這裏是我的代碼:C讀取大數據集變成HDF5慢(使用HD5_read)

#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; 
} 
+1

您是否嘗試過不輸出所有4400萬行?我希望輸出花費的時間比實際的數據讀數更長。 – uesp 2014-09-22 01:30:50

回答

1

您的代碼看起來是正確的,應該是快(假設該文件中的數據也被存儲爲浮點值,否則數據類型轉換可能減緩你的I/O下來小)。我敢打賭,這是損害你的表現的輸出。