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语言的读取方式如下:

Numpy快速处理数据--结构数组(二)_第1张图片

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


你可能感兴趣的:(pyton,结构数组,dtype)