|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 MSK 于 2017-7-19 23:11 编辑
上一贴我们说了Numpy多维数组的数据存取
本节内容:结构数组
还记得dtype吗?
它指示着一个数组的元素类型:>>> b = np.arange(6)
>>> b
array([0, 1, 2, 3, 4, 5])
>>> b.dtype
dtype('int32')#表示数组b的数据类型为32字节的整数型
也可以用dtype来创建数组>>>b = np.array([1,0,0],dtype=np.bool)
用dtype创建结构数组:
假设我们需要一个数组,将人作为它的元素,它的每个元素都有name, age和weight属性
我们先创建一个dtype对象,通过其字典参数描述结构类型的各个字段。字典有两个关键字:names,formats。
每个关键字对应的值都是一个列表。
names定义结构中的每个字段名,而formats则定义每个字段的类型。
>>> persontype = np.dtype({'names':['name','age','weight'],'formats':['S32','i','f']})
S32 : 32个字节的字符串类型,由于结构中的每个元素的大小必须固定,因此需要指定字符串的长度
i : 32bit的整数类型,相当于np.int32
f : 32bit的单精度浮点数类型,相当于np.float32
对于数据结构,这里有详细列表:
(论坛列表有点像markdown~ )
数据类型 | 字符编码 | 整数 | i | 无符号整数 | u | 单精度浮点数 | f | 双精度浮点数 | d | 布尔值 | b | 复数 | D | 字符串 | S | Unicode | U | Void | V
|
S32就表示32字节的字符串~
创建:
>>> a = np.array([("MSK",16,52),("NBA",24,65.2)], dtype=persontype)
>>> a = np.array([[("MSK",16,52),("NBA",24,65.2)]],当然用两个中括号括起来就是创建二维数组了~ dtype=persontype)
>>>
>>> a
array([[(b'MSK', 16, 52. ), (b'NBA', 24, 65.19999695)]],
dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
三个中括号括起来就是创建三维数组了~
>>> a = np.array([[[("MSK",16,52),("NBA",24,65.2)]]],
dtype=persontype)
>>> a
array([[[(b'MSK', 16, 52. ), (b'NBA', 24, 65.19999695)]]],
dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
>>> a[0]
array([[(b'MSK', 16, 52. ), (b'NBA', 24, 65.19999695)]],
dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
看看a的元素类型:>>> a.dtype
dtype([('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
结构数组的存取方式和一般数组相同:
>>> a
array([(b'MSK', 16, 52. ), (b'NBA', 24, 65.19999695)],
dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
>>> a[0]
(b'MSK', 16, 52.)
注意a[0]像一个元组,其实是一个结构:
它与a共享内存数据:
不但可以获得结构元素的某个字段,还可以直接获得结构数组的字段
或者:
|
评分
-
查看全部评分
|