博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『Numpy』内存分析_numpy.dtype解析内存数据
阅读量:5074 次
发布时间:2019-06-12

本文共 2491 字,大约阅读时间需要 8 分钟。

numpy.dtype用于自定义数据类型,实际是指导python程序存取内存数据时的解析方式。

【注意】,更改格式不能使用 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('
>> dt['grades']dtype(('
>> 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(x[1]['grades'])

 

二、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', '
>> 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','

 

四、简单数据格式

int32,big-edian 以及 little-endian

>>> dt = np.dtype('>i4')  定义一个big-endian int 4*8=32位的数据类型>>> dtdtype('>i4')>>> dt.byteorder    //字节顺序:>为big-edian 
<为little-endian '>
'>>> dt.itemsize //字节大小4>>> dt.name //dt类型'int32'>>> dt.type is np.int32True

 

简略字符参

'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")

 

转载于:https://www.cnblogs.com/hellcat/p/8711160.html

你可能感兴趣的文章
重启rabbitmq服务
查看>>
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>
MVC+Servlet+mysql+jsp读取数据库信息
查看>>
黑马程序员——2 注释
查看>>
用OGRE1.74搭建游戏框架(三)--加入人物控制和场景
查看>>
转化课-计算机基础及上网过程
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
互联网模式下我们更加应该“专注”
查看>>
myeclipse集成jdk、tomcat8、maven、svn
查看>>
查询消除重复行
查看>>
Sand Making Plant Produced by Red Star
查看>>
Win 10 文件浏览器无法打开
查看>>
HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)
查看>>
-bash: xx: command not found 在有yum源情况下处理
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>