<p>似乎你没有用Python读取文件的经验。让我在Ipython的一个实践会话中详细地研究一个示例</p>
<p>创建多行文字以模拟文件</p>
<pre><code>In [23]: txt="""0.28, 0.22, 0.23, 0.27
0.12, 0.29, 0.34, 0.21
0.44, 0.56, 0.51, 0.65"""
</code></pre>
<p>把它分成几行来模拟<code>readlines</code>的结果</p>
<pre><code>In [24]: txt=txt.splitlines(True)
In [25]: txt
Out[25]:
['0.28, 0.22, 0.23, 0.27\n',
'0.12, 0.29, 0.34, 0.21\n',
'0.44, 0.56, 0.51, 0.65']
</code></pre>
<p>我可以用<code>genfromtxt</code>将它转换成一个数组(您可以像这样将结果传递给<code>readlines</code>到<code>genfromtxt</code>)。</p>
<pre><code>In [26]: np.genfromtxt(txt, delimiter=',')
Out[26]:
array([[ 0.28, 0.22, 0.23, 0.27],
[ 0.12, 0.29, 0.34, 0.21],
[ 0.44, 0.56, 0.51, 0.65]])
</code></pre>
<p>我可以遍历这些行,去掉<code>\n</code>并拆分成“,”</p>
<pre><code>In [27]: for line in txt:
print line.strip().split(',')
....:
['0.28', ' 0.22', ' 0.23', ' 0.27']
['0.12', ' 0.29', ' 0.34', ' 0.21']
['0.44', ' 0.56', ' 0.51', ' 0.65']
</code></pre>
<p>我可以通过列表理解将每个字符串转换为一个浮点数:</p>
<pre><code>In [28]: for line in txt:
print [float(x) for x in line.strip().split(',')]
....:
[0.28, 0.22, 0.23, 0.27]
[0.12, 0.29, 0.34, 0.21]
[0.44, 0.56, 0.51, 0.65]
</code></pre>
<p>或者把迭代放在另一个列表理解中,我可以得到一个数字列表:</p>
<pre><code>In [29]: data=[[float(x) for x in line.strip().split(',')] for line in txt]
In [30]: data
Out[30]: [[0.28, 0.22, 0.23, 0.27], [0.12, 0.29, 0.34, 0.21], [0.44, 0.56, 0.51, 0.65]]
</code></pre>
<p>我可以把它变成一个数组</p>
<pre><code>In [31]: np.array(data)
Out[31]:
array([[ 0.28, 0.22, 0.23, 0.27],
[ 0.12, 0.29, 0.34, 0.21],
[ 0.44, 0.56, 0.51, 0.65]])
</code></pre>
<p><code>genfromtxt</code>本质上就是通过这个序列——读取行,拆分行,将字符串转换为值,最后从列表中创建一个数组。</p>
<p>有捷径可走,但我想你会受益于这些步骤的详细工作。这既是一个基本的Python字符串和列表操作的练习,也是一个关于数组的练习。</p>