python – 如何一次将超大文件读入Numpy数组N行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何一次将超大文件读入Numpy数组N行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2207字,纯文字阅读大概需要4分钟。
内容图文
![python – 如何一次将超大文件读入Numpy数组N行](/upload/InfoBanner/zyjiaocheng/818/d2ec4e930f454c37ad08a7ab0ba1bbbd.jpg)
我有一个巨大的文件(大约30GB),每行包括2D表面上的点的协调.我需要将文件加载到Numpy数组:points = np.empty((0,2)),并在其上应用scipy.spatial.ConvexHull.由于文件的大小非常大,我无法将其一次加载到内存中,我想将其作为N行批处理加载并在小部分上应用scipy.spatial.ConvexHull,然后加载下N行!这样做有效吗?
我found out在python中你可以使用islice读取文件的N行,但问题是lines_gen是一个生成器对象,它给你文件的每一行,应该在循环中使用,所以我不知道我怎么能以有效的方式将lines_gen转换为Numpy数组?
from itertools import islice
with open(input, 'r') as infile:
lines_gen = islice(infile, N)
我的输入文件:
0.989703 1
0 0
0.0102975 0
0.0102975 0
1 1
0.989703 1
1 1
0 0
0.0102975 0
0.989703 1
0.979405 1
0 0
0.020595 0
0.020595 0
1 1
0.979405 1
1 1
0 0
0.020595 0
0.979405 1
0.969108 1
...
...
...
0 0
0.0308924 0
0.0308924 0
1 1
0.969108 1
1 1
0 0
0.0308924 0
0.969108 1
0.95881 1
0 0
解决方法:
有了你的数据,我可以用5行的方式读取它,如下所示:
In [182]: with open(input,'r') as infile:
while True:
gen = islice(infile,N)
arr = np.genfromtxt(gen, dtype=None)
print arr
if arr.shape[0]<N:
break
.....:
[(0.989703, 1) (0.0, 0) (0.0102975, 0) (0.0102975, 0) (1.0, 1)]
[(0.989703, 1) (1.0, 1) (0.0, 0) (0.0102975, 0) (0.989703, 1)]
[(0.979405, 1) (0.0, 0) (0.020595, 0) (0.020595, 0) (1.0, 1)]
[(0.979405, 1) (1.0, 1) (0.0, 0) (0.020595, 0) (0.979405, 1)]
[(0.969108, 1) (0.0, 0) (0.0308924, 0) (0.0308924, 0) (1.0, 1)]
[(0.969108, 1) (1.0, 1) (0.0, 0) (0.0308924, 0) (0.969108, 1)]
[(0.95881, 1) (0.0, 0)]
同样的事情就像一个块一样:
In [183]: with open(input,'r') as infile:
arr = np.genfromtxt(infile, dtype=None)
.....:
In [184]: arr
Out[184]:
array([(0.989703, 1), (0.0, 0), (0.0102975, 0), (0.0102975, 0), (1.0, 1),
(0.989703, 1), (1.0, 1), (0.0, 0), (0.0102975, 0), (0.989703, 1),
(0.979405, 1), (0.0, 0), (0.020595, 0), (0.020595, 0), (1.0, 1),
(0.979405, 1), (1.0, 1), (0.0, 0), (0.020595, 0), (0.979405, 1),
(0.969108, 1), (0.0, 0), (0.0308924, 0), (0.0308924, 0), (1.0, 1),
(0.969108, 1), (1.0, 1), (0.0, 0), (0.0308924, 0), (0.969108, 1),
(0.95881, 1), (0.0, 0)],
dtype=[('f0', '<f8'), ('f1', '<i4')])
(这是在Python 2.7中;在3中有一个我需要解决的字节/字符串问题).
内容总结
以上是互联网集市为您收集整理的python – 如何一次将超大文件读入Numpy数组N行全部内容,希望文章能够帮你解决python – 如何一次将超大文件读入Numpy数组N行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。