Numpy快速处理数据--结构数组(二)

        在C/C++语言中,有结构体,结构体的使用给编程带来了很大的便利。Numpy作为Python的扩展模块,提供了对类似C/C++结构体的支持。Python定义结构体更为方便,如:

>>> import numpy as np
>>> np.dtype({'names':['name','age','weight'], 'formats':['S1',np.uint8, np.float32]})
dtype([('name', 'S1'), ('age', 'u1'), ('weight', '<f4')])
>>> 
结构体的使用方法如下:

>>> arr = np.array([("Zhang",32,90),("Wang",23,92)],dtype = persontype)
>>> arr
array([(b'Z', 32, 90.0), (b'W', 23, 92.0)], 
      dtype={'names':['name','age','weight'], 'formats':['S1','u1','<f4'], 'offsets':[0,1,4], 'itemsize':8, 'aligned':True})
>>> 
         使用结构数组,首先创建一个dtype对象persontype,它的参数是一个描述结构类型的各个字段的字典。字典有两个键: “names”和“formats”。每个键对应一个列表。’names'定义结构中每个字段的名称,而'formats'则定义每个字段的类型。
        查看数组arr的数据类型:

>>> arr.dtype
dtype({'names':['name','age','weight'], 'formats':['S12','u1','<f4'], 'offsets':[0,12,16], 'itemsize':20}, align=True)
类型字符串前面的“|”、“<”和“>”等字符表示字段的字节顺序:


        结构数组的存取方式和其他数组相同,如:

>>> arr[0]['name']
b'Zhang'
>>> arr[0]['age'] =18
>>> arr
array([(b'Zhang', 18, 90.0), (b'Wang', 23, 92.0)], 
      dtype={'names':['name','age','weight'], 'formats':['S12','u1','<f4'], 'offsets':[0,12,16], 'itemsize':20, 'aligned':True})
>>> 
        除此以外,还可以通过arr.tostring()或arr.tofile()方法将数组arr以二进制的方式转换为字符串或写入文件中,如:

arr.tofile("test.bin")  #存到文件中
         可以通过C/C++对该文件进行读取,C语言的读取方式如下:


        结构数组的内容就介绍到这里,注意在定义结构类型的时候的那个“align=True",该变量主要是使内存对齐,在数据写文件,跨语言访问的时候,内存对齐可以解决很多麻烦,建议在申明结构类型时都内存对齐


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值