<p>您的复合数据类型:</p>
<pre><code>In [33]: peoType=np.dtype({
...: 'names':
...: ['id','value','ability','helpNeeded','helpOut','helpIn'],
...: 'formats':
...: ['int64','float64','float32','float32','object','object'],
...: 'aligned':True
...: })
</code></pre>
<p>具有该数据类型的示例结构化数组:</p>
<pre><code>In [34]: arr = np.zeros(2, peoType)
In [35]: arr
Out[35]:
array([(0, 0., 0., 0., 0, 0), (0, 0., 0., 0., 0, 0)],
dtype={'names':['id','value','ability','helpNeeded','helpOut','helpIn'], 'formats':['<i8','<f8','<f4','<f4','O','O'], 'offsets':[0,8,16,20,24,32], 'itemsize':40, 'aligned':True})
In [36]: arr['id']
Out[36]: array([0, 0])
In [37]: arr['helpOut']
Out[37]: array([0, 0], dtype=object)
</code></pre>
<p><code>()</code>用于标记单个记录。这是一个1d数组,包含记录,而不是行和列。符号试图说明这一点。像<code>reshape</code>和<code>broadcasting</code>这样的操作不会跨越<code>record</code>边界</p>
<p>列出你的<code>temp</code>列表:</p>
<pre><code>In [39]: array = np.array
In [40]: temp=[[0,
...: 86381.14170220899,
...: 0.12974876676966007,
...: 49.537761763004056,
...: array([0., 0., 0., 0., 0.]),
...: array([0., 0., 0., 0., 0.])],
...: [1,
...: 95532.94886721167,
...: 0.3886984384013719,
...: 49.9244719570076,
...: array([0., 0., 0., 0., 0.]),
...: array([0., 0., 0., 0., 0.])],
...: [2,
...: 53932.09250542036,
...: 0.6518993291826463,
...: 92.72979425242384,
...: array([0., 0., 0., 0., 0.]),
...: array([0., 0., 0., 0., 0.])],
...: [3,
...: 161978.14156816195,
...: 0.49130827569636754,
...: 56.44742176255372,
...: array([0., 0., 0., 0., 0.]),
...: array([0., 0., 0., 0., 0.])],
...: [4,
...: 38679.21128565417,
...: 0.6979042712239539,
...: 132.35562828412765,
...: array([0., 0., 0., 0., 0.]),
...: array([0., 0., 0., 0., 0.])]]
</code></pre>
<p>从列表中生成结构化数组-首先根据结构化数组的要求将其转换为元组列表:</p>
<pre><code>In [42]: arr = np.array([tuple(row) for row in temp], peoType)
In [43]: arr
Out[43]:
array([(0, 86381.14170221, 0.12974876, 49.53776 , array([0., 0., 0., 0., 0.]), array([0., 0., 0., 0., 0.])),
(1, 95532.94886721, 0.38869843, 49.924473, array([0., 0., 0., 0., 0.]), array([0., 0., 0., 0., 0.])),
(2, 53932.09250542, 0.65189934, 92.7298 , array([0., 0., 0., 0., 0.]), array([0., 0., 0., 0., 0.])),
(3, 161978.14156816, 0.49130827, 56.447422, array([0., 0., 0., 0., 0.]), array([0., 0., 0., 0., 0.])),
(4, 38679.21128565, 0.6979043 , 132.35562 , array([0., 0., 0., 0., 0.]), array([0., 0., 0., 0., 0.]))],
dtype={'names':['id','value','ability','helpNeeded','helpOut','helpIn'], 'formats':['<i8','<f8','<f4','<f4','O','O'], 'offsets':[0,8,16,20,24,32], 'itemsize':40, 'aligned':True})
In [44]: arr['helpOut']
Out[44]:
array([array([0., 0., 0., 0., 0.]), array([0., 0., 0., 0., 0.]),
array([0., 0., 0., 0., 0.]), array([0., 0., 0., 0., 0.]),
array([0., 0., 0., 0., 0.])], dtype=object)
</code></pre>
<p>对象数据类型字段是一个1d对象数组-数组</p>
<p>如果所有这些对象字段都包含相同大小的数组,我们可以将其替换为多项目字段:</p>
<pre><code>In [50]: dt=np.dtype({
...: 'names':
...: ['id','value','ability','helpNeeded','helpOut','helpIn'],
...: 'formats':
...: ['int64','float64','float32','float32','5float','5float'],
...: 'aligned':True
...: })
In [51]: arr = np.array([tuple(row) for row in temp], dt)
In [52]: arr
Out[52]:
array([(0, 86381.14170221, 0.12974876, 49.53776 , [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]),
(1, 95532.94886721, 0.38869843, 49.924473, [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]),
(2, 53932.09250542, 0.65189934, 92.7298 , [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]),
(3, 161978.14156816, 0.49130827, 56.447422, [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]),
(4, 38679.21128565, 0.6979043 , 132.35562 , [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.])],
dtype={'names':['id','value','ability','helpNeeded','helpOut','helpIn'], 'formats':['<i8','<f8','<f4','<f4',('<f8', (5,)),('<f8', (5,))], 'offsets':[0,8,16,20,24,64], 'itemsize':104, 'aligned':True})
In [53]: arr['helpOut']
Out[53]:
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
</code></pre>
<p>现在,该字段将生成一个二维数组</p>