<p><code>np.genfromtxt</code>可以轻松地将数据加载到结构化数组中。它将是一个1d数组,每个列都有一个字段:</p>
<p>使用行列表模拟文件:</p>
<pre><code> In [265]: txt=b"""A,1,2,3,4,5
.....: B,6,7,8,9,10
.....: C,11,12,13,14,15
.....: A,16,17,18,19,20"""
In [266]: txt=txt.splitlines()
In [267]: A=np.genfromtxt(txt,delimiter=',',names=None,dtype=None)
In [268]: A
Out[268]:
array([(b'A', 1, 2, 3, 4, 5), (b'B', 6, 7, 8, 9, 10),
(b'C', 11, 12, 13, 14, 15), (b'A', 16, 17, 18, 19, 20)],
dtype=[('f0', 'S1'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<i4')])
</code></pre>
<p>它从列值-strings和int推导出<code>dtype</code>。字段按名称访问</p>
^{pr2}$
<p>我还可以定义一个<code>dtype</code>,将字符串放入一个字段,将所有其他值放入另一个字段。在</p>
<pre><code>In [271]: A=np.genfromtxt(txt,delimiter=',',names=None,dtype='S2,(5)int')
In [272]: A
Out[272]:
array([(b'A', [1, 2, 3, 4, 5]), (b'B', [6, 7, 8, 9, 10]),
(b'C', [11, 12, 13, 14, 15]), (b'A', [16, 17, 18, 19, 20])],
dtype=[('f0', 'S2'), ('f1', '<i4', (5,))])
In [273]: A['f1']
Out[273]:
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
</code></pre>