np.void
我想你认为它np.void
会起作用,因为type
结构化数组记录是void
:
In [32]: node_dtype = np.dtype([("parent", np.void), ("info", np.uint8)])
In [33]: np.zeros(3, node_dtype)
Out[33]:
array([(b'', 0), (b'', 0), (b'', 0)],
dtype=[('parent', 'V'), ('info', 'u1')])
In [34]: type(_[0])
Out[34]: numpy.void
但请注意
In [35]: __['parent']
Out[35]: array([b'', b'', b''], dtype='|V0')
该字段占用 0 个字节。
In [36]: np.zeros(3, np.void)
Out[36]: array([b'', b'', b''], dtype='|V0')
In [37]: np.zeros(3, np.void(0))
Out[37]: array([b'', b'', b''], dtype='|V0')
In [38]: np.zeros(3, np.void(5))
Out[38]:
array([b'\x00\x00\x00\x00\x00', b'\x00\x00\x00\x00\x00',
b'\x00\x00\x00\x00\x00'], dtype='|V5')
In [39]: _[0] = b'12345'
np.void
通常需要一个参数,一个指定长度的整数。
虽然可以嵌套 dtypes,但结果必须仍然有一个 known itemsize
:
In [57]: dt0 = np.dtype('i,f')
In [58]: dt1 = np.dtype([('f0','U3'), ('nested',dt0)])
In [59]: dt1
Out[59]: dtype([('f0', '<U3'), ('nested', [('f0', '<i4'), ('f1', '<f4')])])
In [60]: dt1.itemsize
Out[60]: 20
结果数组将有一个已知大小的数据缓冲区,足以容纳字节arr.size
项。arr.itemsize
对象数据类型
object
您可以使用dtype 字段构造结构化数组
In [61]: arr = np.empty(3, 'O,i')
In [62]: arr
Out[62]:
array([(None, 0), (None, 0), (None, 0)],
dtype=[('f0', 'O'), ('f1', '<i4')])
In [63]: arr[1]['f0']=arr[0]
In [64]: arr[2]['f0']=arr[1]
In [65]: arr
Out[65]:
array([(None, 0), ((None, 0), 0), (((None, 0), 0), 0)],
dtype=[('f0', 'O'), ('f1', '<i4')])
In [66]: arr[0]['f1']=100
In [67]: arr
Out[67]:
array([(None, 100), ((None, 100), 0), (((None, 100), 0), 0)],
dtype=[('f0', 'O'), ('f1', '<i4')])
In [68]: arr[1]['f1']=200
In [69]: arr[2]['f1']=300
In [70]: arr
Out[70]:
array([(None, 100), ((None, 100), 200), (((None, 100), 200), 300)],
dtype=[('f0', 'O'), ('f1', '<i4')])
我不知道这是否会是一个特别有用的结构。一份清单可能一样好
In [71]: arr.tolist()
Out[71]: [(None, 100), ((None, 100), 200), (((None, 100), 200), 300)]