<p>除非您真的需要混合<code>dtype</code>的numpy数组,否则我建议您创建一个列表列表:</p>
<pre><code>In [96]: alist = []
In [97]: for i in range(5):
...: alist.append([999, 'sss'])
...:
In [98]: alist
Out[98]: [[999, 'sss'], [999, 'sss'], [999, 'sss'], [999, 'sss'], [999, 'sss']]
</code></pre>
<p>或者,如果你列出一个元组列表,你可以继续一个make a structured array-1d,其中包含2个所需的<code>dtype</code>字段:</p>
<pre><code>In [99]: alist = []
In [100]: for i in range(5):
...: alist.append((999, 'sss'))
...:
...:
In [101]: alist
Out[101]: [(999, 'sss'), (999, 'sss'), (999, 'sss'), (999, 'sss'), (999, 'sss')]
In [102]: np.array(alist, dtype='int,U3')
Out[102]:
array([(999, 'sss'), (999, 'sss'), (999, 'sss'), (999, 'sss'),
(999, 'sss')], dtype=[('f0', '<i8'), ('f1', '<U3')])
</code></pre>
<p>在尝试混合整数和字符串时,需要注意预期用途。你知道吗</p>
<hr/>
<p>注意创建“空”数组时会发生什么:</p>
<pre><code>In [103]: arr = np.empty(4)
In [104]: arr
Out[104]: array([0.e+000, 0.e+000, 0.e+000, 5.e-324])
In [105]: arr.dtype
Out[105]: dtype('float64')
</code></pre>
<p>它创建一个所需大小的数组,但默认值为<code>dtype</code>,<code>float</code>。初始值是垃圾-尽管显示为浮点数。你知道吗</p>
<p>这意味着你唯一能放入<code>arr[0]</code>的就是一个浮点数。你知道吗</p>
<pre><code>In [106]: arr[0]=999 # converted to float
In [107]: arr[1]='sss'
...
ValueError: could not convert string to float: 'sss'
In [108]: arr
Out[108]: array([9.99e+002, 0.00e+000, 0.00e+000, 4.94e-324])
</code></pre>
<p>它也不会接受一个列表或元组,一个序列。它必须是可以转换成浮点数的东西。你知道吗</p>
<p>指定<code>object</code>数据类型可以让您在元素中放入任何内容,因为元素实际上包含指针—就像列表一样。你知道吗</p>
<pre><code>In [110]: arr = np.empty(4,dtype=object)
In [111]: arr
Out[111]: array([None, None, None, None], dtype=object)
In [112]: arr[0]=1
In [113]: arr[1]=.999
In [114]: arr[2]='sss'
In [115]: arr[3]=[999,'sss']
In [116]: arr
Out[116]: array([1, 0.999, 'sss', list([999, 'sss'])], dtype=object)
</code></pre>
<p>这样的数组要么是一个美化的列表,要么是一个堕落的列表,这取决于你的需要。你知道吗</p>