「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」
前言
Python numpy 模块中最核心的是ndarray 对象。 ndarray 对象有如下几个特点:
- ndarray 要求元素数据类型都是同类型的,并且每个元素占用相同大小的内存块。
- ndarray 存储的数据在计算机底层硬盘内存中是连续的一段存储空间
ndarray 包含两部分:
- metdata :存放数组类型dtype、数组维度ndim、维度数量shape、维间距strides等
- raw data:存放原始数据data
通常情况,raw data存储数据的内存与运行的Python的计算机的字节顺序不同。
因此,ndarray 数组中数据存储地址会发生变化,因此本期会涉及numpy 新概念字节交换。
1. 字节序列模式
-
什么是字节交换?
众所周知,在所有计算器内存中,对于多字节对象都是以连续的字节序列进行存储的。
字节排序是一个对象,为darray内存中的数据提供Python数组接口。
字节排序存在跨越多字节的程序对象的存储规则,主要分为大端模式和小端模式。
-
大端模式:
-
大端模式英文名称为Big-Endian
-
把高位字节排放在低地址端,低位字节放在高地址端
-
大端模式符合人阅读习惯,从低到高进行排列
-
-
小端模式:
-
小端模式英文名为Little-Endian
-
把低位字节排放到内存地址低地址端,高位字节放在内存高地址端
-
-
大小端模式优势:
- 大端模式: 对符号位的固定为第一个字节,易判断正负
- 小端模式: 强制转换数据,不需要调整的字节内容。
2. 更改字节顺序
对于 numpy 数组的字节顺序与其底层的内存之前关系存在两种:
- arr.newbyteorder() 可以更改数组dtype中的字节顺序信息,以便将基础数据解释为不同的字节顺序。
- arr.byteswap() 更改基础数据的字节顺序,保持dtype 解释不变
目前更改numpy 数组字节顺序通常有三种情况:
- 当数据与dtype 字节序列不匹配,需更改dtype 匹配数据
- 当数据与dtype 字节序列不匹配,需要更改数据得以匹配dtype
- 当数据与dtype 字节序匹配,期望交换数据与dtype
总结
本期,对numpy模块中对于数组内部存储,字节序列两种规则大端模式和小端模式进行学习。
大小端规则,常见于电脑内部系统存储方式,通常IBM、Sun系统是以大端模式存储,X86、DEC CPU系统是采用小端模式。
以上是本期内容,欢迎大佬们点赞评论,下期见~