鱼C论坛

 找回密码
 立即注册
查看: 5013|回复: 15

[技术交流] 科学计算 神经网络 深度学习 Numpy 【3】结构数组

[复制链接]
发表于 2017-7-19 23:11:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 MSK 于 2017-7-19 23:11 编辑
上一贴我们说了Numpy多维数组的数据存取
本节内容:结构数组

还记得dtype吗?
它指示着一个数组的元素类型:
  1. >>> b = np.arange(6)
  2. >>> b
  3. array([0, 1, 2, 3, 4, 5])
  4. >>> b.dtype
  5. dtype('int32')#表示数组b的数据类型为32字节的整数型
复制代码
也可以用dtype来创建数组
  1. >>>b = np.array([1,0,0],dtype=np.bool)
复制代码

用dtype创建结构数组:

假设我们需要一个数组,将人作为它的元素,它的每个元素都有name, age和weight属性


我们先创建一个dtype对象,通过其字典参数描述结构类型的各个字段。字典有两个关键字:namesformats
每个关键字对应的值都是一个列表。
names定义结构中的每个字段名,而formats则定义每个字段的类型。


  1. >>> 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
UnicodeU
VoidV



S32就表示32字节的字符串~

创建:

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



>>> a = np.array([[("MSK",16,52),("NBA",24,65.2)]],当然用两个中括号括起来就是创建二维数组了~
  1.     dtype=persontype)
  2. >>>
  3. >>> a
  4. array([[(b'MSK', 16,  52.        ), (b'NBA', 24,  65.19999695)]],
  5.       dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
复制代码

三个中括号括起来就是创建三维数组了~
  1. >>> a = np.array([[[("MSK",16,52),("NBA",24,65.2)]]],
  2.     dtype=persontype)
  3. >>> a
  4. array([[[(b'MSK', 16,  52.        ), (b'NBA', 24,  65.19999695)]]],
  5.       dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
  6. >>> a[0]
  7. array([[(b'MSK', 16,  52.        ), (b'NBA', 24,  65.19999695)]],
  8.       dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
复制代码

看看a的元素类型:

  1. >>> a.dtype
  2. dtype([('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
复制代码

结构数组的存取方式和一般数组相同:

  1. >>> a
  2. array([(b'MSK', 16,  52.        ), (b'NBA', 24,  65.19999695)],
  3.       dtype=[('name', 'S32'), ('age', '<i4'), ('weight', '<f4')])
  4. >>> a[0]
  5. (b'MSK', 16,  52.)
复制代码

注意a[0]像一个元组,其实是一个结构:


  1. >>> a[0]['name']
复制代码
它与a共享内存数据:

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


  1. >>> a['age']
复制代码




游客,如果您要查看本帖隐藏内容请回复



评分

参与人数 2荣誉 +5 鱼币 +10 贡献 +3 收起 理由
爱俯卧撑的123 + 5 + 5 + 3
小甲鱼 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-27 12:15:28 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-13 10:43:39 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-21 19:56:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-21 11:56:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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']})
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 22:52:26 | 显示全部楼层
谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-3 22:34:07 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-4 17:28:21 | 显示全部楼层
numpy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-2 20:56:51 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-19 22:35:57 | 显示全部楼层
Fgyhhhhhhhhh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-29 09:40:25 | 显示全部楼层
看得有点不明白,可不可以有实际应用的例子?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-22 14:25:17 | 显示全部楼层
正在研究numpy,感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-23 16:36:25 From FishC Mobile | 显示全部楼层
感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-9 17:32:20 | 显示全部楼层
6666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-26 12:04:18 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 07:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表