结构化数组

可以将结构化数据类型视为具有一定长度的字节序列(结构的项目大小),该字节序列被解释为字段的集合。每个字段在结构中都有一个名称,一个数据类型和一个字节偏移量。
– dtype(fieldname, datatype, shape)
1.元组列表,每个字段一个元组

np.dtype([(‘x’,‘f4’),(‘y’,np.float32),(‘z’,‘f4’,(2,2))])
dtype([(‘x’, ‘<f4’), (‘y’, ‘<f4’), (‘z’, ‘<f4’, (2, 2))])

np.dtype([(‘x’,‘f4’),(’’,‘i4’),(‘z’,‘i8’)])
dtype([(‘x’, ‘<f4’), (‘f1’, ‘<i4’), (‘z’, ‘<i8’)])

2.一串用逗号分隔的dtype规范

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))])

3.字段参数数组字典
– names formats必填 offsets itemsize aligned titles可选

np.dtype({‘names’:[‘col1’,‘col2’],‘formats’:[‘i4’,‘f4’]})
dtype([(‘col1’, ‘<i4’), (‘col2’, ‘<f4’)])
dtype({‘names’:[‘col1’,‘col2’], ‘formats’:[’<i4’,’<f4’], ‘offsets’:[0,4], ‘itemsize’:12})

np.dtype({‘names’😦‘col1’,‘col2’),‘format1s’😦‘i4’,‘f4’),‘offsets’:[0,4],‘itemsize’:12})

4.字段名称字典

np.dtype({‘col1’😦‘i1’,0),‘col2’😦‘f4’,1)})
dtype([(‘col1’, ‘i1’), (‘col2’, ‘<f4’)])

– 显示结构化数据类型

np.dtype({‘col1’😦‘i1’,0),‘col2’😦‘f4’,1)})
dtype([(‘col1’, ‘i1’), (‘col2’, ‘<f4’)])

– fields属性包括字段名 类型 和偏移量

np.dtype(‘u1,u1,i4,i8,u2’).fields
mappingproxy({‘f0’: (dtype(‘uint8’), 0), ‘f1’: (dtype(‘uint8’), 1), ‘f2’: (dtype(‘int32’), 2), ‘f3’: (dtype(‘int64’), 6), ‘f4’: (dtype(‘uint16’), 14)})

– d.fields[names][0]: dtype(‘name’) d.fields[names][1]: dtype(‘position’)

def print_offsets(d):
… print(‘offsets:’,[d.fields[name][1] for name in d.names])
… print(‘itemsize:’,d.itemsize)

print_offsets(np.dtype(‘u1,u1,i4,i8,u2’))
offsets: [0, 1, 2, 6, 14]
itemsize: 16

print_offsets(np.dtype(‘u1,u1,i4,i8,u2’,align=True))
offsets: [0, 1, 4, 8, 16]
itemsize: 24

(np.dtype(‘u1,u1,i4,i8,u2’)).names
(‘f0’, ‘f1’, ‘f2’, ‘f3’, ‘f4’)

– 根据列名访问字段数据

x=np.array([(1,2),(3,4)],dtype=[(‘foo’,‘i8’),(‘bar’,‘f4’)])
x
array([(1, 2.), (3, 4.)], dtype=[(‘foo’, ‘<i8’), (‘bar’, ‘<f4’)])

x[‘foo’]
array([1, 3], dtype=int64)

x=np.array([(1,2,3)],dtype=‘i,f,f’)

x
array([(1, 2., 3.)], dtype=[(‘f0’, ‘<i4’), (‘f1’, ‘<f4’), (‘f2’, ‘<f4’)])

scalar=x[0]
scalar
(1, 2., 3.)

type(scalar)
<class ‘numpy.void’>

x.shape
(1,)

x=np.array([(1,2,3)],dtype=‘i,f,f’)
x
array([(1, 2., 3.)], dtype=[(‘f0’, ‘<i4’), (‘f1’, ‘<f4’), (‘f2’, ‘<f4’)])

x.shape
(1,)

x=np.array([(1,2,3)],dtype=‘i,f,f’)[0]
x[0]
1

x[1]=4
x
(1, 4., 3.)

x.item()
(1, 4.0, 3.0)

type(x.item())
<class ‘tuple’>

– rec子类

recordarr = np.rec.array([(1,2,‘hello’),(2,3,‘world’)],dtype=[(‘foo’,‘i4’),(‘bar’,‘f4’),(‘baz’,‘S10’)])
recordarr.bar
array([2., 3.], dtype=float32)

recordarr[1:2]
rec.array([(2, 3., b’world’)],
dtype=[(‘foo’, ‘<i4’), (‘bar’, ‘<f4’), (‘baz’, ‘S10’)])

recordarr[1:2].foo
array([2])

recordarr.foo[1:2]
array([2])

– 与上面做对比

record = np.array([(1,2,‘hello’),(2,3,‘world’)],dtype=[(‘foo’,‘i4’),(‘bar’,‘f4’),(‘baz’,‘S10’)])
record[‘bar’]
array([2., 3.], dtype=float32)

record[1:2]
array([(2, 3., b’world’)],
dtype=[(‘foo’, ‘<i4’), (‘bar’, ‘<f4’), (‘baz’, ‘S10’)])

record[1:2][‘foo’]
array([2])

– 用忆存在的array对像初始化rec对像

recordxrr = np.rec.array(record)
recordxrr
rec.array([(1, 2., b’hello’), (2, 3., b’world’)],
dtype=[(‘foo’, ‘<i4’), (‘bar’, ‘<f4’), (‘baz’, ‘S10’)])
https://numpy.org/doc/stable/user/basics.rec.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值