Python 里面 np.savetxt()和 pickle 本地化时,两个性能对比怎么样

2018-11-26 17:08:57 +08:00
 DongDongXie

如题,数据量比较大,想把一个 ndarray 保存到本地,这两种方法和直接 write 到本地性能相比怎么样,我试了下 savetxt()有点慢,请问大家有什么比较好的方法吗

2666 次点击
所在节点    Python
6 条回复
glasslion
2018-11-26 17:20:47 +08:00
试试 Apache Arrow(Apache Parquet Format)
xpresslink
2018-11-26 18:30:06 +08:00
cPickle 了解一下
DongDongXie
2018-11-26 19:54:04 +08:00
@xpresslink 以前用过这个,据说比 pickle 快
deepreader
2018-11-27 11:47:00 +08:00
massage pack 了解一下
wwqgtxx
2018-11-27 15:22:36 +08:00
明明就有正宗的 np.save
https://docs.scipy.org/doc/numpy/reference/generated/numpy.save.html
非要用其他的序列化方法干嘛
wwqgtxx
2018-11-27 15:48:44 +08:00
其实还有一些蹊跷意淫的办法,比如你先 pickle 保存 ndarray 的 dtype size shape 三个属性,然后用 memcpy 直接保存 ndarray 的 data,那是一个 memoryview 对象,你可以用 mmap 或者直接 file.write 保存进文件,读的时候用 np.frombuffer 或者 np.fromstring 读进来后 reshape 一下就好了( frombuffer 的话最后需要 copy 一下,否则当原 buffer 对象失效之后会出问题,当然如果你原 buffer 对象是从 mmap 获得的话那也没事,而且后续对该 ndarray 的修改还能用过 mmap.flush 写回硬盘)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/511665

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX