先说在本机环境下的测试结果,仅供参考,其中单次调用时测试了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实现根据图片批量匹配(查找)相似图片
作业2:pandas统计分析基础知识(读写文件、DataFrame常用操作、转换与处理时间序列数据)及练习题
CSDN-Ada助手:
【以图搜图】Python实现根据图片批量匹配(查找)相似图片
Aliqa:
作业3(大作业):python数据分析与应用大作业,对用户用电量数据进行数据处理,包括数据转置、异常数据识别和处理、统计基本统计量(包括峰度、偏度)、按日/周(求和)差分、5%分位数等
CSDN-Ada助手: