『Numpy』内存分析_numpy.dtype解析内存数据
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('<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")
『Numpy』内存分析_numpy.dtype解析内存数据的更多相关文章
- 『Numpy』内存分析_高级切片和内存数据解析
在计算机中,没有任何数据类型是固定的,完全取决于如何看待这片数据的内存区域. 在numpy.ndarray.view中,提供对内存区域不同的切割方式,来完成数据类型的转换,而无须要对数据进行额外的co ...
- 分析Python中解析构建数据知识
分析Python中解析构建数据知识 Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记 ...
- 『Numpy』内存分析_利用共享内存创建数组
引.内存探究常用函数 id(),查询对象标识,通常返回的是对象的地址 sys.getsizeof(),返回的是 这个对象所占用的空间大小,对于数组来说,除了数组中每个值占用空间外,数组对象还会存储数组 ...
- 『Numpy』常用方法记录
numpy教程 防止输出省略号 import numpy as np np.set_printoptions(threshold=np.inf) 广播机制 numpy计算函数返回默认是一维行向量: i ...
- 『Numpy』np.ravel()和np.flatten()
What is the difference between flatten and ravel functions in numpy? 两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷 ...
- 『Numpy』高级函数_np.nditer()&ufunc运算
1.np.nditer():numpy迭代器 默认情况下,nditer将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定op_flags=[' ...
- 『Numpy』np.meshgrid
生成网格坐标,一个很好的说明图如下: 虽然xy双坐标比较常用,但实际上其输入可以是任意多的数组,输出数组数目等于输出数组数目,且彼此间shape一致. 如果输入数组不是一维的,会拉伸为1维进行计算. ...
- 『计算机视觉』Mask-RCNN_锚框生成
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- Chrome开发者工具之JavaScript内存分析
阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...
随机推荐
- Java+selenium如何清理浏览器Cookie
一.场景:在未注销系统切换不同账号登录系统下,登录会有浏览器缓存,导致登录时间异常缓慢.跟开发浏览器缓存处理机制有关系. 二.解决方法: 获取浏览器Cookie,在Login方法前增加清除缓存的代码. ...
- JAVA:IDEA安装、创建项目、tomcat配置、maven配置(1)
一.安装 JDK安装自行百度,IDEA安装: IDEA安装包下载:https://www.jetbrains.com/idea/download/ 安装过程一路默认,需要选择的就勾选 .java之类的 ...
- 深入理解Java虚拟机3-chap4-5-斗之气10段
一.虚拟机性能监控与故障处理 1.JDK的命令行工具:对jdk/lib/tools.jar的薄包装,Linux下可能是Shell编写,执行类似于Linux中的命令 2.可视化工具JConsole 打开 ...
- 当业务逻辑没错,直接mapper里面出错时
仔细检查,发现sql语句写的也没问题,但就是出错 slide_show_img_url = #{slideShowImgUrl,jdbcType=VARCHAR}, where goods_slide ...
- Java项目中的异常处理情况
1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象 ...
- Codeforces 799D Field expansion(随机算法)
Field expansion [题目链接]Field expansion [题目类型]随机化算法 &题解: 参考自:http://www.cnblogs.com/Dragon-Light/p ...
- HTML5 元素属性介绍
HTMLElement 表示所有的 HTML 元素. 这里将以事件属性和非事件属性的分类进行介绍. 事件属性大多继承自GlobalEventHandlers,非事件属性大多继承自Element. 菜单 ...
- MySQL Workbench在archlinux中出现 Could not store password: The name org.freedesktop.secrets was not provided by any .service files的错误
MySQL Workbench在archlinux中出现 Could not store password: The name org.freedesktop.secrets was not prov ...
- 改变FileUpload文件上传控件的显示方式,确认后上传
一.Aspx页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="File ...
- 生成id
package com.develop.web.util; import java.security.MessageDigest; import java.text.SimpleDateFormat; ...