<p>使用文本列表:</p>
<pre><code>In [338]: txt = '''1, 1.3, abcde
...: 2, 1.3, def'''.splitlines()
</code></pre>
<p>结构化阵列:</p>
<pre><code>In [339]: np.genfromtxt(txt, dtype=None, delimiter=',', encoding=None)
Out[339]:
array([(1, 1.3, ' abcde'), (2, 1.3, ' def')],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<U6')])
</code></pre>
<p>尝试指定对象-每个项都有自己的类型:</p>
<pre><code>In [340]: np.genfromtxt(txt, dtype=object, delimiter=',', encoding=None)
Out[340]:
array([[b'1', b' 1.3', b' abcde'],
[b'2', b' 1.3', b' def']], dtype=object)
</code></pre>
<p>它不尝试将任何字符串转换为数字</p>
<p><code>converters</code>正确转换列,但由于某些原因,仍然生成结构化数组:</p>
<pre><code>In [341]: np.genfromtxt(txt, dtype=object, delimiter=',', encoding=None, convert
...: ers={0:int, 1:float})
Out[341]:
array([(1, 1.3, b' abcde'), (2, 1.3, b' def')],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', 'O')])
</code></pre>
<p>但您可以通过列表将结构化数组转换为对象数据类型:</p>
<pre><code>In [346]: np.genfromtxt(txt, dtype=None, delimiter=',', encoding=None)
Out[346]:
array([(1, 1.3, ' abcde'), (2, 1.3, ' def')],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<U6')])
In [347]: np.array(_.tolist(), object)
Out[347]:
array([[1, 1.3, ' abcde'],
[2, 1.3, ' def']], dtype=object)
</code></pre>
<p>另一个选择是自己拆分行,建立一个列表列表<code>genfromtxt</code>是这样做的,没有更多的钟和口哨</p>
<pre><code>In [357]: lines=[]
...: for line in txt:
...: i = line.split(',')
...: x = (int(i[0]), float(i[1]), i[2].strip())
...: lines.append(x)
In [358]: lines
Out[358]: [(1, 1.3, 'abcde'), (2, 1.3, 'def')]
In [359]: np.array(lines,object)
Out[359]:
array([[1, 1.3, 'abcde'],
[2, 1.3, 'def']], dtype=object)
</code></pre>
<p>但是请注意,您不能对该对象数组和数字数组进行数学运算,甚至不能对结构化数组的数字字段进行数学运算</p>