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

【注意】,更改格式不能使用 array.dtype=int32 这样的硬性更改,会不改变内存直接该边解析过程,导致读取出问题,所以使用 array.astype(int32) ,这样才安全。

一、基本使用示例

  1. // 定义一个数据类型,其中name为16为字符串,grades为2个float64的子数组
  2. >>> dt = np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))])
  3. >>> dt['name']
  4. dtype('<U16')
  5. >>> dt['grades']
  6. dtype(('<f8',(2,)))
  7.  
  8. // 调用方法查看数组
  9. >>> x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)
  10. >>> x[1]
  11. ('John', [6.0, 7.0])
  12. >>> x[1]['grades']
  13. array([ 6., 7.])
  14. >>> type(x[1])
  15. <type 'numpy.void'>
  16. >>> type(x[1]['grades'])
  17. <type 'numpy.ndarray'>

二、dtype复杂格式概览

1、(flexible_dtype, itemsize):不指定大小的数据类型,大小

  1. >>> dt = np.dtype((void, 10)) # 10位缓存区对象
  2. >>> dt = np.dtype((str, 35)) # 35字符字符串
  3. >>> dt = np.dtype(('U', 10)) # 10字符unicode string

2、(fixed_dtype, shape):固定大小的类型,个数

  1. >>> dt = np.dtype((np.int32, (2,2))) # 2*2int子数组
  2. >>> dt = np.dtype(('S10', 1)) # 10字符字符串
  3. >>> dt = np.dtype(('i4, (2,3)f8, f4', (2,3))) # 2x3结构子数组

3、[(field_name, field_dtype, field_shape), …]:字段名,格式(含类型大小),个数

文首示例中的例子即为此种情况

  1. >>> dt = np.dtype([('big', '>i4'), ('little', '<i4')])
  2. >>> dt = np.dtype([('R','u1'), ('G','u1'), ('B','u1'), ('A','u1')])

4、{‘names’: …, ‘formats’: …, ‘offsets’: …, ‘titles’: …, ‘itemsize’: …}:同上,使用字典来表达,且定制程度更高

  1. >>> dt = np.dtype({'names': ['r','g','b','a'],'formats': [uint8, uint8, uint8, uint8]})

5、{‘field1’: …, ‘field2’: …, …}: 同上

  1. // col1在字节0处,col2在字节10处,col3在字节14处
  2. >>> dt = np.dtype({'col1': ('S10', 0), 'col2': (float32, 10),'col3': (int, 14)})

三、获取数组的dtype

数组的.dtype返回4的格式,将属性作为条目展示

数组的.dtype.fields会进一步转换为5的格式,更强调字段,将之作为条目展示

  1. persontype = np.dtype({
  2. 'names':['name','age','weight','height'],
  3. 'formats':['S30','i','f','f']}, align=True)
  4. a = np.array([('Zhang',32,72.5,167),
  5. ('Wang',24,65,170)],dtype=persontype)
  6.  
  7. print(a.dtype
  8. #dtype({'names':['name','age','weight','height'],
  9. # 'formats':['S30','<i4','<f4','<f4'],
  10. # 'offsets':[0,32,36,40],
  11. # 'itemsize':44},
  12. # align=True)
  13.  
  14. print(a.dtype.fields)
  15. # mappingproxy({'age': (dtype('int32'), 32),
  16. # 'height': (dtype('float32'), 40),
  17. # 'name': (dtype('S30'), 0),
  18. # 'weight': (dtype('float32'), 36)})

四、简单数据格式

int32,big-edian 以及 little-endian

  1. >>> dt = np.dtype('>i4') 定义一个big-endian int 4*8=32位的数据类型
  2. >>> dt
  3. dtype('>i4')
  4. >>> dt.byteorder //字节顺序:>为big-edian <为little-endian
  5. '>'
  6. >>> dt.itemsize //字节大小
  7. 4
  8. >>> dt.name //dt类型
  9. 'int32'
  10. >>> dt.type is np.int32
  11. True

简略字符参

  1. 'b' boolean
  2. 'i' (signed) integer
  3. 'u' unsigned integer
  4. 'f' floating-point
  5. 'c' complex-floating point
  6. 'm' timedelta
  7. 'M' datetime
  8. 'O' (Python) objects
  9. 'S', 'a' (byte-)string
  10. 'U' Unicode
  11. 'V' raw data (void)

混编格式

[个数] | 类型 | 字节数

  1. // 3字节字符串、3个8字节整型子数组、3*4的10字节字符串数组
  2. np.dtype("a3, 3u8, (3,4)a10")

『Numpy』内存分析_numpy.dtype解析内存数据的更多相关文章

  1. 『Numpy』内存分析_高级切片和内存数据解析

    在计算机中,没有任何数据类型是固定的,完全取决于如何看待这片数据的内存区域. 在numpy.ndarray.view中,提供对内存区域不同的切割方式,来完成数据类型的转换,而无须要对数据进行额外的co ...

  2. 分析Python中解析构建数据知识

    分析Python中解析构建数据知识 Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记 ...

  3. 『Numpy』内存分析_利用共享内存创建数组

    引.内存探究常用函数 id(),查询对象标识,通常返回的是对象的地址 sys.getsizeof(),返回的是 这个对象所占用的空间大小,对于数组来说,除了数组中每个值占用空间外,数组对象还会存储数组 ...

  4. 『Numpy』常用方法记录

    numpy教程 防止输出省略号 import numpy as np np.set_printoptions(threshold=np.inf) 广播机制 numpy计算函数返回默认是一维行向量: i ...

  5. 『Numpy』np.ravel()和np.flatten()

    What is the difference between flatten and ravel functions in numpy? 两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷 ...

  6. 『Numpy』高级函数_np.nditer()&ufunc运算

    1.np.nditer():numpy迭代器 默认情况下,nditer将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定op_flags=[' ...

  7. 『Numpy』np.meshgrid

    生成网格坐标,一个很好的说明图如下: 虽然xy双坐标比较常用,但实际上其输入可以是任意多的数组,输出数组数目等于输出数组数目,且彼此间shape一致. 如果输入数组不是一维的,会拉伸为1维进行计算. ...

  8. 『计算机视觉』Mask-RCNN_锚框生成

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  9. Chrome开发者工具之JavaScript内存分析

    阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...

随机推荐

  1. ajax中的同步与异步修改数据的问题

    这次项目中因为前端有事儿,项目紧急加个新需求,于是自己硬着头皮上去看了下前端的逻辑后便开始动手了,但是为了简单起见就直接自己写了个ajax调服务来获取数据,然后修改前端定义的全局数据 //ajax来请 ...

  2. Vuex入门(5)—— 为什么要用Action管理异步操作

    Action 类似于 mutation,不同在于: 1.Action 提交的是 mutation,而不是直接变更状态. 2.Action 可以包含任意异步操作. 官方给的定义我没什么意见,事实上我通过 ...

  3. 关于MySQL慢日志,你想知道的都在这

    关于MySQL慢日志,你想知道的都在这 https://mp.weixin.qq.com/s/Ifbq0Dk13SO3WVghqWVUbA 作者介绍邹鹏,现任职于腾讯云数据库团队,负责腾讯云数据库My ...

  4. Spring Jdbc 框架整合的第一天

    Spring  Jdbc的概述 它是Spring框架的持久层子框架.用于对数据库的操作 什么是数据库的操作? 答:对数据库的增删改查 在使用Spring  Jdbc框架,要用到一个类---->J ...

  5. Java发送邮件功能

    package com.hd.all.test.testjava; import java.util.Properties; import javax.mail.Address; import jav ...

  6. 【UML】-NO.44.EBook.5.UML.1.004-【UML 大战需求分析】- 顺序图(Sequence Diagram)

    1.0.0 Summary Tittle:[UML]-NO.44.EBook.1.UML.1.004-[UML 大战需求分析]- 顺序图(Sequence Diagram) Style:DesignP ...

  7. python中列表中元素的增删改查

    增: append : 默认添加到列表的最后一个位置 insert : 可以通过下标添加到列表的任意位置 extend: a.extend[b] --将b列表的元素全加入到列表b中 删; remove ...

  8. Gitlab+Jenkins实现自动部署

    Gitlab+Jenkins实现自动部署   系统环境: Gitlab主机 IP:192.168.1.2 Jenkins主机 IP:192.168.1.3 一.为何要做自动部署 #部署Tomcat的在 ...

  9. Gis数据处理

    几何投影和解析投影几何投影是将椭球面上的经纬线网投影到几何平面上,然后将几何面展为平面.几何投影可以分为方位投影.圆柱投影和圆锥投影.这三种投影纬线的形状不同.方位投影纬线的形状是同心圆:圆柱投影纬线 ...

  10. flask_mail发送163邮件,报553错误的原因

    最近在练习用flask_mail发送163邮件时报错: reply: '553 authentication is required,163 smtp9,DcCowAD3eEQZ561caRiaBA- ...