Python NumPy:从字符串列表加载异构数据列

Python NumPy:从字符串列表加载异构数据列,python,load,numpy,Python,Load,Numpy,我正在处理存储在ASCII文件中的数组数据(类似于)。我的文件至少有2M行(158MB),并且用不同的模式分为多个部分。在我的读取格式模块中,我想通过lines=open('myfile.txt','r').readlines()读取整个文件,这样我就可以索引每个部分的位置,然后将我需要的每个部分读入NumPy数据结构 例如,一节的一个摘录是: >>> print lines[5:10] [' 1 0.1000 0.300E-03 0.000E+00 0.300E-0

我正在处理存储在ASCII文件中的数组数据(类似于)。我的文件至少有2M行(158MB),并且用不同的模式分为多个部分。在我的读取格式模块中,我想通过
lines=open('myfile.txt','r').readlines()
读取整个文件,这样我就可以索引每个部分的位置,然后将我需要的每个部分读入NumPy数据结构

例如,一节的一个摘录是:

>>> print lines[5:10]
['      1 0.1000 0.300E-03 0.000E+00 0.300E-03 0.000E+00 0.000E+00 0.300E-03 0.100E-03\n', 
'      2 0.1000 0.120E-02 0.000E+00 0.120E-02 0.000E+00 0.000E+00 0.120E-02 0.100E-03\n', 
'      3 0.1000 0.100E-02 0.000E+00 0.100E-02 0.000E+00 0.000E+00 0.100E-02 0.100E-03\n', 
'      4 0.1000 0.110E-02 0.000E+00 0.110E-02 0.000E+00 0.000E+00 0.110E-02 0.100E-03\n', 
'      5 0.1000 0.700E-03 0.000E+00 0.700E-03 0.000E+00 0.000E+00 0.700E-03 0.100E-03\n']
它具有模式
[int,float,float,float,float,float,float,float]
,后面的部分将具有更简单的
[int,float]
模式:

>>> print lines[20:25]
['       1         0.00000E+00\n',
'       2         0.43927E-07\n',
'       3         0.44006E-07\n',
'       4         0.44020E-07\n',
'       5         0.44039E-07\n']
如何使用NumPy快速加载行的不同部分?我看到有
np.loadtxt
,但它需要一个文件句柄,并且一直读到最后。我还看到了*函数中的
np.from,但我不确定如何将它们与我已经阅读的
行一起使用。我需要把文件读两遍吗

关于异构数据类型,我想我可以使用复合的
dtype
,比如
np.dtype([('col1',')可以从字符串生成文件类型对象

from StringIO import StringIO
m = np.loadtxt(StringIO('\n'.join(lines[5:10])))
或者更简单,就这么做吧

m = np.fromiter(lines[5:10],np.dtype([('col1', '<i2'), ('col2', 'f4'), ('col3', 'f4')]))

m=np.fromiter(第[5:10]行),np.dtype([('col1',)我得到了一个相关的
MemoryError
,字符串
join
有几百万行。因此,我将我的readline文件输入输入到
StringIO
缓冲区,以传递到
np.loadtxt
(我需要通过readline预处理输入以找到相关部分)。所有很棒的提示,谢谢!注意:
np.fromiter
示例无法按预期工作,原因不明。