Python 如何加速从二进制文件到HDF5文件的转换?

Python 如何加速从二进制文件到HDF5文件的转换?,python,numpy,hdf5,h5py,Python,Numpy,Hdf5,H5py,我有.dat二进制文件,想将其转换为.h5文件。因此我编写了以下代码: import os import h5py import numpy as np import struct import random float_size=4 input_node=1534 output_node=256 input_file='./data/training_normalization_Target_ForWolfram.dat' out_file=r'./data/training_normali

我有
.dat
二进制文件,想将其转换为
.h5
文件。因此我编写了以下代码:

import os
import h5py
import numpy as np
import struct
import random
float_size=4

input_node=1534
output_node=256
input_file='./data/training_normalization_Target_ForWolfram.dat'
out_file=r'./data/training_normalization_Target_ForWolfram.h5'

input_and_output_node=input_node+output_node
with open(input_file,'rb') as f:
    f.seek(0,os.SEEK_END)
    file_len=f.tell()/(float_size*input_and_output_node)
    print 'the size of input_file is '+str(os.path.getsize(input_file)/(1024**3.))+' GB'

with h5py.File(out_file, "w") as f:
    Input =  f.create_dataset('Input', (file_len,input_node),dtype='float',chunks=True,compression='gzip')
    Output = f.create_dataset('Output',(file_len,output_node),dtype='float',chunks=True,compression='gzip')
    index=range(0,file_len)
    random.shuffle(index)
    with open(input_file,'rb') as fin:
        print 'it will iterate '+ str(file_len) +' times'
        for i in range(file_len):
            print i
            fin.seek(float_size*input_and_output_node*index[i],os.SEEK_SET)
            Input[i,:]  = np.array(struct.unpack('<'+str(input_node )+'f',fin.read(float_size*input_node)))
            Output[i,:] = np.array(struct.unpack('<'+str(output_node)+'f',fin.read(float_size*output_node)))
导入操作系统
进口h5py
将numpy作为np导入
导入结构
随机输入
浮动大小=4
输入节点=1534
输出节点=256
输入文件='。/data/training\u normalization\u Target\u ForWolfram.dat'
out\u file=r'./data/training\u normalization\u Target\u ForWolfram.h5'
输入节点和输出节点=输入节点+输出节点
打开(输入_文件,'rb')作为f:
f、 寻道(0,操作系统寻道结束)
file_len=f.tell()/(浮点大小*输入和输出节点)
打印“输入文件的大小为”+str(os.path.getsize(输入文件)/(1024**3.))+“GB”
将h5py.File(out_File,“w”)作为f:
Input=f.create_数据集('Input',(文件长度,输入节点),dtype='float',chunks=True,compression='gzip')
Output=f.create_数据集('Output',(文件长度,输出节点),dtype='float',chunks=True,compression='gzip')
索引=范围(0,文件长度)
随机。随机(索引)
打开(输入_文件,'rb')作为fin:
打印“它将迭代”+str(文件长度)+“次”
对于范围内的i(文件):
打印i
fin.seek(浮点大小*输入和输出节点*索引[i],操作系统seek\u集)

Input[i,:]=np.array(struct.unpack('是唯一的更改
chunks=True,compression='gzip'
?有多慢?你测试过读取数据是最佳的吗?你有没有尝试过不同的压缩,比如blosc,用于输出?@kakk11我编辑我的问题