建国爱吃巧克力 2023-02-21 22:15 采纳率: 20%
浏览 17
已结题

使用hdf5存文件的速度比使用csv存文件的速度还慢是怎么回事?

使用hdf5存文件的速度比使用csv存文件的速度还慢是怎么回事?
数据量:2000000
下图是使用hdf5存数据的时间

img

下图是使用csv在相同配置下存相同数据的时间

img

hdf5代码如下:

#2、信号列表
signal=[]
for i in range (3,10):
    signal.append('KMPL' + str(i) + 'T')
for i in range (3,5):
    signal.append('CMPL' + str(i) + 'T')
for i in range (6,10):
    signal.append('CMPL' + str(i) + 'T')
for i in range(2, 9):
    signal.append('KMPH' + str(i) + 'T')
for i in range(2, 9):
    signal.append('CMPH' + str(i) + 'T')
for i in range(23,26):
    signal.append('SXR' + str(i) + 'D')
print(len(signal))


#3、存储数据,存储成HDF5格式
t0=time.time()
t1= time.perf_counter()

pretip = list(east.get('dim_of(\\' + signal[0] + ')'))
tip = pretip[1400000:]
print(tip[0:3])


f=h5py.File(r"..\Data\Raw Data\98157.hdf5", 'w')
#创建一个名字为炮号的组
g=f.create_group("98157")

#在这个组里面分别创建name为time、信号名的数据集并赋值。
g["time"]=tip
t2=time.time()
print("time tip:", t2 - t0)
for i in range(0, 1):
    predip = list(east.get('\\' + signal[i]))
    dip = predip[len(predip) - len(tip):]
    g[signal[i]]=dip
    t=time.time()
    print("time dip:", t - t2)


t4=time.time()
t3= time.perf_counter()

print("cpu time:",t3-t1)
print("wall time:",t4-t0)

for key in g.keys():
    print(g[key].name)
    print(g[key].shape)

f.close()

csv代码如下:


# 信号名列表
#K段、C段
signal200=[]
for i in range (1,11):
    signal200.append('KMPL' + str(i) + 'T')
for i in range (1,11):
    signal200.append('CMPL' + str(i) + 'T')
for i in range(1, 9):
    signal200.append('KMPH' + str(i) + 'T')
for i in range(1, 9):
    signal200.append('CMPH' + str(i) + 'T')

def downloadDataKC(shotNumber):
    #K段、C段
    print("KC")
    f = open(r"..\Data\Raw Data\98157.csv", 'w', newline='', encoding='utf-8-sig')
    csv_write = csv.writer(f)
    # 获取信号时间大于0的数据,存入csv文件
    pretip = list(east.get('dim_of(\\' + signal200[0] + ')'))  # SXR信号虽然在UDA上比K/CMPH/L大是250khz,但是从同一棵树上抓下来的时间数据和CMPL这些的时间数据一样,所以就算成一样的时间了
    tip = pretip[1400000:]
    print(len(tip))
    csv_write.writerow(tip)
    t2=time.time()
    print("time:",t2-t1)
    # 释放内存
    del pretip
    # 获取信号强度数据(对应的时刻大于0),存入csv文件
    for i in range(2, 3):
        predip = list(east.get('\\' + signal200[i]))
        dip = predip[len(predip) - len(tip):]
        print(signal200[i])
        print(len(dip))
        # 将数据写入文件
        csv_write.writerow(dip)
        # 释放内存
        del predip, dip
    t3=time.time()
    print("time:",t3-t2)
    # 关闭文件
    f.close()
    # 释放内存
    del tip
    gc.collect()

if __name__=='__main__':
    print(98157)
    east.openTree(mdsTree, 98157)
    t1=time.time()
    downloadDataKC(98157)
    t4 = time.time()
    print("time:",t4-t1)
  • 写回答

1条回答 默认 最新

  • 专注算法的马里奥学长 人工智能领域新星创作者 2023-02-21 22:39
    关注

    如果数据结构是大量的小数组,是有这个可能的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月22日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。