虽然直接的 Python 描述是一个包含整数和列表的元组的列表,但显示也与 numpy 结构化数组一致。
定义复合数据类型:
In [596]: dt = np.dtype('i,i,i,i,(2)i')
In [597]: dt
Out[597]: dtype([('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4', (2,))])
使用此列表输入创建一个数组。复合 dtype(结构化数组)的数据采用元组列表的形式。每个元组代表一个记录或数组元素的数据:
In [598]: arr = np.array([(451,165,76,-77,[98,42])], dtype=dt)
In [599]: arr
Out[599]:
array([(451, 165, 76, -77, [98, 42])],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4', (2,))])
这个数组的打印看起来就像问题:
In [600]: print(arr)
[(451, 165, 76, -77, [98, 42])]
这是一个包含 5 个字段的 1 元素数组。最后一个字段的形状为 (2,),实际上是一个 2 元素数组。
In [601]: arr['f4']
Out[601]: array([[98, 42]], dtype=int32)
In [602]: _.shape
Out[602]: (1, 2)