『Numpy』内存分析_numpy.dtype内存数据解析方式指导
2018-05-12 12:51
691 查看
numpy.dtype用于自定义数据类型,实际是指导python程序存取内存数据时的解析方式。
【注意】,更改格式不能使用 array.dtype=int32 这样的硬性更改,会不改变内存直接该边解析过程,导致读取出问题,所以使用 array.astype(int32) ,这样才安全。
数组的.dtype.fields会进一步转换为5的格式,更强调字段,将之作为条目展示
简略字符参
混编格式
[个数] | 类型 | 字节数
【注意】,更改格式不能使用 array.dtype=int32 这样的硬性更改,会不改变内存直接该边解析过程,导致读取出问题,所以使用 array.astype(int32) ,这样才安全。
一、基本使用示例
// 定义一个数据类型,其中name为16为字符串,grades为2个float64的子数组 >>> dt = np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))]) >>> dt['name'] dtype('<U16') >>> dt['grades'] dtype(('<f8',(2,))) // 调用方法查看数组 >>> x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt) >>> x[1] ('John', [6.0, 7.0]) >>> x[1]['grades'] array([ 6., 7.]) >>> type(x[1]) <type 'numpy.void'> >>> type(x[1]['grades']) <type 'numpy.ndarray'>
二、dtype复杂格式概览
1、(flexible_dtype, itemsize):不指定大小的数据类型,大小
>>> dt = np.dtype((void, 10)) # 10位缓存区对象 >>> dt = np.dtype((str, 35)) # 35字符字符串 >>> dt = np.dtype(('U', 10)) # 10字符unicode string
2、(fixed_dtype, shape):固定大小的类型,个数
>>> dt = np.dtype((np.int32, (2,2))) # 2*2int子数组 >>> dt = np.dtype(('S10', 1)) # 10字符字符串 >>> dt = np.dtype(('i4, (2,3)f8, f4', (2,3))) # 2x3结构子数组
3、[(field_name, field_dtype, field_shape), …]:字段名,格式(含类型大小),个数
文首示例中的例子即为此种情况>>> dt = np.dtype([('big', '>i4'), ('little', '<i4')]) >>> dt = np.dtype([('R','u1'), ('G','u1'), ('B','u1'), ('A','u1')])
4、{‘names’: …, ‘formats’: …, ‘offsets’: …, ‘titles’: …, ‘itemsize’: …}:同上,使用字典来表达,且定制程度更高
>>> dt = np.dtype({'names': ['r','g','b','a'],'formats': [uint8, uint8, uint8, uint8]})
5、{‘field1’: …, ‘field2’: …, …}: 同上
// col1在字节0处,col2在字节10处,col3在字节14处 >>> dt = np.dtype({'col1': ('S10', 0), 'col2': (float32, 10),'col3': (int, 14)})
三、获取数组的dtype
数组的.dtype返回4的格式,将属性作为条目展示数组的.dtype.fields会进一步转换为5的格式,更强调字段,将之作为条目展示
persontype = np.dtype({ 'names':['name','age','weight','height'], 'formats':['S30','i','f','f']}, align=True) a = np.array([('Zhang',32,72.5,167), ('Wang',24,65,170)],dtype=persontype) print(a.dtype) #dtype({'names':['name','age','weight','height'], # 'formats':['S30','<i4','<f4','<f4'], # 'offsets':[0,32,36,40], # 'itemsize':44}, # align=True) print(a.dtype.fields) # mappingproxy({'age': (dtype('int32'), 32), # 'height': (dtype('float32'), 40), # 'name': (dtype('S30'), 0), # 'weight': (dtype('float32'), 36)})
四、简单数据格式
int32,big-edian 以及 little-endian>>> dt = np.dtype('>i4') 定义一个big-endian int 4*8=32位的数据类型 >>> dt dtype('>i4') >>> dt.byteorder //字节顺序:>为big-edian <为little-endian '>' >>> dt.itemsize //字节大小 4 >>> dt.name //dt类型 'int32' >>> dt.type is np.int32 True
简略字符参
'b' boolean 'i' (signed) integer 'u' unsigned integer 'f' floating-point 'c' complex-floating point 'm' timedelta 'M' datetime 'O' (Python) objects 'S', 'a' (byte-)string 'U' Unicode 'V' raw data (void)
混编格式
[个数] | 类型 | 字节数
// 3字节字符串、3个8字节整型子数组、3*4的10字节字符串数组 np.dtype("a3, 3u8, (3,4)a10")
相关文章推荐
- Android 服务端返回的数据含有html字段时的解析方式
- C语言float型数据在内存中的储存方式
- simpleXML方式解析XML,并对XML数据进行增删改查
- 利用Python进行数据分析(6) NumPy基础: 矢量计算
- 数据分析numpy和series1
- 数据与内存中的存储方式
- java中的各种数据类型在内存中存储的方式 一
- 数据绑定以及Container.DataItem几种方式与用法分析
- 漫谈redis在运维数据分析中的去重统计方式
- android下各种XML数据解析方式
- java各种数据类型在内存中的存储方式
- Android解析JSON方式 服务器端生成JSON数据--很好的例子
- Android XML解析Pull方式———解析网络数据示例
- 主外键关联数据的处理方式,以及应用场景分析
- 域通信中数据报方式发送失败的原因分析
- JSON数据解析(GSON方式)
- Python数据分析汇总:numpy与pandas,数据清洗
- 分析两种显著网站的数据传输方式
- 数据结构基础——内存中数据存储的基本方式(单链表)
- NewRelic移动端性能数据的钻取分析解析