MSK 发表于 2017-7-19 23:11:28

科学计算 神经网络 深度学习 Numpy 【3】结构数组

本帖最后由 MSK 于 2017-7-19 23:11 编辑

上一贴我们说了Numpy多维数组的数据存取
本节内容:结构数组

还记得dtype吗?
它指示着一个数组的元素类型:
>>> b = np.arange(6)
>>> b
array()
>>> b.dtype
dtype('int32')#表示数组b的数据类型为32字节的整数型也可以用dtype来创建数组
>>>b = np.array(,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~{:10_288:})


数据类型字符编码
整数i
无符号整数u
单精度浮点数f
双精度浮点数d
布尔值b
复数D
字符串S
UnicodeU
VoidV




S32就表示32字节的字符串~{:10_297:}

创建:

>>> a = np.array([("MSK",16,52),("NBA",24,65.2)], dtype=persontype)


>>> a = np.array([[("MSK",16,52),("NBA",24,65.2)]],当然用两个中括号括起来就是创建二维数组了~{:10_297:}    dtype=persontype)
>>>
>>> a
array([[(b'MSK', 16,52.      ), (b'NBA', 24,65.19999695)]],
      dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
三个中括号括起来就是创建三维数组了~{:10_297:}
>>> 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
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')])
结构数组的存取方式和一般数组相同:{:10_312:}

>>> a
array([(b'MSK', 16,52.      ), (b'NBA', 24,65.19999695)],
      dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
>>> a
(b'MSK', 16,52.)
注意a像一个元组,其实是一个结构:{:9_232:}

>>> a['name']它与a共享内存数据:

>>> c = a不但可以获得结构元素的某个字段,还可以直接获得结构数组的字段
>>> a[:]['age']或者:


>>> a['age']



**** Hidden Message *****


tuxiaoqing 发表于 2017-9-27 12:15:28

感谢分享

shuo 发表于 2017-12-13 10:43:39

感谢分享

Surtees_CYX 发表于 2017-12-21 19:56:50

{:10_254:}

大头目 发表于 2018-3-21 11:56:37

{:5_91:}

大头目 发表于 2018-3-28 11:47:18

最后一行正确操作的代码写错了

>>> persontype = np.dtype({'names':['name','age','weight'],'formats':['U32',i,f]}
修正
>>> persontype = np.dtype({'names':['name','age','weight'],'formats':['U32','i','f']})

张001 发表于 2018-3-28 22:52:26

谢谢

zm23134 发表于 2018-4-3 22:34:07

学习

水笔、小鹏~ 发表于 2018-4-4 17:28:21

numpy

易少侠闯江湖 发表于 2018-12-2 20:56:51

学习

MichaelFang 发表于 2018-12-19 22:35:57

Fgyhhhhhhhhh

wiselin 发表于 2018-12-29 09:40:25

看得有点不明白,可不可以有实际应用的例子?

沐风栉雨 发表于 2019-4-22 14:25:17

正在研究numpy,感谢分享

Recheal_H 发表于 2019-8-23 16:36:25

感谢楼主

coolischill 发表于 2020-10-9 17:32:20

6666

泰勒就是展不开 发表于 2023-1-26 12:04:18

感谢分享
页: [1]
查看完整版本: 科学计算 神经网络 深度学习 Numpy 【3】结构数组