先说在本机环境下的测试结果,仅供参考,其中单次调用时测试了10次,多次调用时测试了5次:

单次读取时,h5py文件整体平均读取速度最快,pkl文件整体平均读取最慢

多次读取(循环读取同一文件10次,并取平均时间)时,pt文件平均读取速度最快,pkl文件平均读取速度最慢

需要注意的是 ,每个文件类型读取出的数据类型不同, 如果需要特定的数据类型,那么当数据读取后还需要增加数据类型转换时间 ,比如存储[1000000, 1024]维的数据时,若提取需要的是torch类型数据,那么存储为h5py文件后读取时需要进行数据转换,所以可以在存储数据时直接使用pt文件存储,此时读取时就不需要类型转换。 (我踩的坑,从h5py读取的时又使用了数据类型转换,从而导致读取很慢(读一个文件要几分钟))

文件类型 h5py npy pt pkl
读取出的数据类型 numpy.ndarray numpy.ndarray torch.Tensor 写入时的数据类型

以单次运行时间为准(单位:秒,测试10次):

文件类型 单次运行时间(最长) 单次运行时间(最短) 单次运行时间(平均)
h5py 2.9399638175964355 2.3647351264953613 2.56110846996307
npy 2.813739061355591 2.6315581798553467 2.72723414897918
pt 3.1011040210723877 2.7481846809387207 2.90884675979614
pkl 4.722779989242554 4.355636358261108 4.56104216575622

以多次运行(循环读取同一文件10次,并取平均时间)时间为准(单位:秒,测试5次):

文件类型 多次运行时间(最长) 多次运行时间(最短) 多次运行时间(平均)
h5py 2.88373696804046 2.54924149513244 2.74235633373260
npy 2.82599551677703 2.58592479228973 2.70383455276489
pt 2.63072323799133 2.41257598400115 2.53340683937072
pkl 4.05210723876953 3.87074110507965 3.96310455799102

1  前言

使用背景:需要保存通过包括但不限于torch及numpy创建的数据(在这里主要测试的是通过神经网络训练,提取到的图片的特征向量)

数据格式及大小:在这里使用torch创建数据,没有使用GPU(已经是该配置下能运行的最大数据量了,否则会爆内存),几个文件类型存储的data是同一个data

data = torch.Tensor(1000000, 1024)

运行环境:具体参数参考R9000P 2021 3070版本;数据存储在新加的固态上型号是三星1tb 980

测试内容:测试python主要的几种存储数据方式包括:h5py、npy、pkl、pt的读取速度。同时,测试分为单次运行与多次运行(单次运行循环读取10次),其 分别在不同的py文件 下(需在不同py文件下测试,同时每个文件类型的测试也需要在不同py文件下测试,且同一文件类型不能连续测试,否则会存在缓存影响测试结果)。

2  测试

存储文件大小, 几种文件存储大小基本相同

各文件类型单次运行(各文件类型读取时,在不同的py文件中)时,运行速度如下(单位:秒):

测试次数\文件类型 h5py npy pt pkl
1 2.9399638175964355 2.7908334732055664 2.9762351512908936 4.643392324447632
2 2.5050277709960938 2.813739061355591 2.7838234901428223 4.722779989242554
3 2.648083448410034 2.742082357406616 2.8236582279205322 4.454906702041626
4 2.4942474365234375 2.749253511428833 2.7481846809387207 4.355636358261108
5 2.5487558841705322 2.696244239807129 2.9988608360290527 4.5721657276153564
6 2.4321188926696777 2.7138049602508545 3.1011040210723877 4.612890243530273
7 2.49503231048584 2.6315581798553467 2.92618727684021 4.6190714836120605
8 2.3647351264953613 2.770236015319824 2.824173927307129 4.568334579467773
9 2.5203959941864014 2.666151762008667 3.005869150161743 4.478247404098511
10 2.662724018096924 2.6984379291534424 2.9003708362579346 4.582996845245361
平均 2.56110846996307 2.72723414897918 2.90884675979614 4.56104216575622

各文件类型多次运行(单次运行时循环读取10次,并取平均)时,其平均运行速度如下(单位:秒):

测试次数\文件类型 h5py npy pt pkl
1 2.88373696804046 2.82599551677703 2.41257598400115 3.87074110507965
2 2.54924149513244 2.63526268005371 2.56912226676940 4.05210723876953
3 2.57715878486633 2.58592479228973 2.53995752334594 3.91412274837493
4 2.80590989589691 2.79449951648712 2.51465518474578 3.96075069904327
5 2.89573452472686 2.67749025821685 2.63072323799133 4.01780099868774
平均 2.74235633373260 2.70383455276489 2.53340683937072 3.96310455799102

2.1  h5py文件存取

f = h5py.File('./datasets/test.h5', 'w') f.create_dataset('features', data=data) f.close() start = time.time() f = h5py.File('./datasets/test.h5', 'r') vecs = f['features'][()] f.close() end = time.time() - start print(end) start = time.time() start_end = start ltime = [] for i in range(10): f = h5py.File('./datasets/test.h5', 'r') vecs = f['features'][()] f.close() ltime.append(time.time()-start) start = time.time() end = time.time() - start_end print(ltime) print(np.mean(ltime))

2.2  npy文件存取

np.save('./datasets/test.npy', data) start = time.time() vecs_npy = np.load('./datasets/test.npy') end = time.time() - start print(end) start = time.time() start_end = start ltime = [] for i in range(10): vecs_npy = np.load('./datasets/test.npy') ltime.append(time.time()-start) start = time.time() end = time.time() - start_end print(ltime) print(np.mean(ltime))

2.3  pt文件存取

torch.save(data, './datasets/test.pt') start = time.time() vecs_pt = torch.load('./datasets/test.pt') end = time.time() - start print(end) start = time.time() start_end = start ltime = [] for i in range(10): vecs_pt = torch.load('./datasets/test.pt') ltime.append(time.time()-start) start = time.time() end = time.time() - start_end print(ltime) print(np.mean(ltime))

2.4  pkl文件存取

f = open('./datasets/test.pkl', 'wb') pickle.dump(data, f) f.close() start = time.time() f = open('./datasets/test.pkl', 'rb+') vecs_pkl = pickle.load(f) f.close() end = time.time() - start print(end) start = time.time() start_end = start ltime = [] for i in range(10): f = open('./datasets/test.pkl', 'rb+') vecs_pkl = pickle.load(f) f.close() ltime.append(time.time()-start) start = time.time() end = time.time() - start_end print(ltime) print(np.mean(ltime)) 使用背景:需要保存通过包括但不限于torch及numpy创建的数据(在这里主要测试的是通过网络训练,提取到的图片的特征向量)数据格式及大小:在这里使用torch创建数据,没用使用GPU(已经是该配置下能运行的最大数据量了,否则会爆内存)运行环境:具体参数参考R9000P 2021 3070版本;数据存储在新加的固态上型号是三星1tb 980测试内容:测试python主要的几种存储数据方式包括:h5py、npy、pkl、pt的读取速度。...
(1小记录) python 写向 数据 库导入一个有100万行的 csv 文件,速度终于快了一开始用load infile直接整个文件导入,结果 Python 报错:MemoryError 一开始用load infile直接整个文件导入,结果 Python 报错:MemoryError 导入语句: load_sql = “”" LOAD DATA lOCAL INFILE ‘{}’ INTO TABLE {} FIELDS TERMINATED by ‘,’ optionally enclosed by ‘"’ escap
今天有需求, 需要 把系统所有用户注册的id和邮箱等信息导出来提供给他们,在mysql里面count了下,大概有350万左右 就尝试了下用 python 实现,顺带练习下 python csv 的功能,本来想用工具的,但想了下速度会很慢, 整个导出过程大概就3分钟左右,还是蛮快的,毕竟有三百多万,导完后有150M左右 下面是我的脚本deal_ csv .py,由于 需要 连接mysql 数据 库,脚本依赖MySQL
本文来探索一下 python 中提供的各种 数据 保存格式的性能如何。主要以一个 ndarray 格式的 数据 进行处理分析。包括下面 几种 方式 : .bin格式, tofile() 和 fromfile() .npy格式,save() 和 load() .txt 或者 . csv 格式,savetxt() 和 loadtxt() .h5 文件 .pkl 文件 import numpy as np from __fut
追求速度问题,使用 csv 缓存,从 csv 中获取 数据 ,速度最快 pymssql模块:使用execute, 然后fetchall(),速度在 7min 左右 pandas read_sql:速度差不多, 数据 量大,速度有优势 pyodbc模块、pyodbc模块待测试,速度应该会没差别 pandas模块 read_ csv :直接从 csv 文件取相同 数据 ,read_ csv ... with open('file. csv ', newline='') as csv file: reader = csv .reader( csv file, delimiter=',', quotechar='|') for row in reader: print(', '.join(row)) 使用pandas库: ``` python import pandas as pd df = pd.read_ csv ('file. csv ') print(df) 以上是两种常见的 方式 ,还有其他如 numpy 库等 方式 可以 读取 CSV 数据 。 作业3(大作业):python数据分析与应用大作业,对用户用电量数据进行数据处理,包括数据转置、异常数据识别和处理、统计基本统计量(包括峰度、偏度)、按日/周(求和)差分、5%分位数等 18722 作业3(大作业):python数据分析与应用大作业,对用户用电量数据进行数据处理,包括数据转置、异常数据识别和处理、统计基本统计量(包括峰度、偏度)、按日/周(求和)差分、5%分位数等 JeffStarmGo: 这不是python极简讲义里pandas的思考题么? 【以图搜图】Python实现根据图片批量匹配(查找)相似图片 思路:修改代码55行56行,不要让他提前结束,然后用一个字典保存小于某一个阈值的所有图片和它的检索权重,最后把字典根据检索到的权重排个序,应该就能实现了。回复的有点晚,不知道能解决你的问题吗 作业2:pandas统计分析基础知识(读写文件、DataFrame常用操作、转换与处理时间序列数据)及练习题 CSDN-Ada助手: pandas的核心数据结构是 Serials 和 Dataframe,这两个数据结构的核心API是哪些? 【以图搜图】Python实现根据图片批量匹配(查找)相似图片 Aliqa: 大佬,可以问问怎么实现检索多个结果吗?自己试着改了以后bug越改越多 表情包 作业3(大作业):python数据分析与应用大作业,对用户用电量数据进行数据处理,包括数据转置、异常数据识别和处理、统计基本统计量(包括峰度、偏度)、按日/周(求和)差分、5%分位数等 CSDN-Ada助手: 多亏了你这篇博客, 解决了问题: https://ask.csdn.net/questions/8040864, 请多输出高质量博客, 帮助更多的人