1、结构化数据类型
2、字段访问
结构化数据类型可以被认为是一定长度的字节序列(结构的项大小),它被解释为字段的集合。 每个字段在结构中都有一个名称、一个数据类型和一个字节偏移量。 字段的数据类型可以是任何 numpy 数据类型
可以使用函数 numpy.dtype 创建结构化数据类型,有 4 种替代形式的规范,它们的灵活性和简洁性各不相同:
元组列表,每个字段一个元组。每个元组都具有 (fieldname, datatype, shape) 形式,其中 shape 是可选的
np.dtype([('x', 'f4'), ('y', np.float32), ('z', 'f4', (2, 2))])
# dtype([('x', '<f4'), ('y', '<f4'), ('z', '<f4', (2, 2))])
#如果 fieldname 是空字符串 '',则该字段将被赋予 f# 形式的默认名称
np.dtype([('x', 'f4'), ('', 'i4'), ('z', 'i8')])
# dtype([('x', '<f4'), ('f1', '<i4'), ('z', '<i8')])
在这个速记符号中,任何字符串 dtype 规范都可以在字符串中使用并用逗号分隔,并且字段名称被赋予默认名称 f0、f1 等
np.dtype('i8, f4, S3')
# dtype([('f0', '<i8'), ('f1', '<f4'), ('f2', 'S3')])
np.dtype('3int8, float32, (2, 3)float64')
# dtype([('f0', 'i1', (3,)), ('f1', '<f4'), ('f2', '<f8', (2, 3))])
该字典有两个必需键,“名称”和“格式”,‘
np.dtype({'names': ['col1', 'col2'], 'formats': ['i4', 'f4']})
# dtype([('col1', '<i4'), ('col2', '<f4')])
np.dtype({'names': ['col1', 'col2'],
'formats': ['i4', 'f4'],
'offsets': [0, 4],
'itemsize': 12})
# dtype({'names': ['col1', 'col2'], 'formats': ['<i4', '<f4'],
# 'offsets': [0, 4], 'itemsize': 12})
字典的键是字段名,值是指定类型和偏移量的元组:
np.dtype({'col1': ('i1', 0), 'col2': ('f4', 1)})
# dtype([('col1', 'i1'), ('col2', '<f4')])
如果 ndarray 对象是结构化数组,则可以通过使用字符串索引数组来访问数组的字段,类似于字典
对结构化数组的索引也可以通过字段名称列表来完成,例如 x[['field-name1', 'field-name2']]
如果访问的字段是子数组,则子数组的维度将附加到结果的形状中。 例如:
x = np.zeros((2, 2), dtype=[('a', np.int32),
('b', np.float64, (3, 3))
])
x
'''
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., 0., 0.], [0., 0., 0.]]),
(0, [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])]],
dtype=[('a', '<i4'), ('b', '<f8', (3, 3))])
'''
x['a'].shape
# (2, 2)
x['a'].dtype
# dtype('int32')
x['b'].shape
# (2, 2, 3, 3)
x['b'].dtype
# dtype('float64')
d = np.dtype([('x', 'i8'), ('y', 'f4')])
d.names
#('x', 'y')
d.fields
可以索引并分配给具有多字段索引的结构化数组,其中索引是字段名称列表。
a = np.zeros(3, dtype=[('a', 'i4'), ('b', 'i4'), ('c', 'f4')])
a[['a', 'c']]
array([(0, 0.), (0, 0.), (0, 0.)],
dtype={'names':['a','c'], 'formats':['<i4','<f4'], 'offsets':[0,8], 'itemsize':12})
阅读量:2012
点赞量:0
收藏量:0