科学计算 神经网络 深度学习 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 *****
感谢分享 感谢分享 {:10_254:} {:5_91:} 最后一行正确操作的代码写错了
>>> persontype = np.dtype({'names':['name','age','weight'],'formats':['U32',i,f]}
修正
>>> persontype = np.dtype({'names':['name','age','weight'],'formats':['U32','i','f']}) 谢谢
学习 numpy 学习 Fgyhhhhhhhhh
看得有点不明白,可不可以有实际应用的例子? 正在研究numpy,感谢分享 感谢楼主 6666 感谢分享
页:
[1]