|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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共享内存数据:
不但可以获得结构元素的某个字段,还可以直接获得结构数组的字段
或者:
|
评分
-
查看全部评分
|