numpy(01 入门)
目录
一、Python NumPy 数据类型
1.1 NumPy 基本类型
1.2 数据类型对象 (dtype)
1.3 具体实例
二、Numpy数据类型转换
2.1 浮点数据转换
2.2 整型数据转换
2.3 浮点数转整数
一、Python NumPy 数据类型
1.1 NumPy 基本类型
下表列举了常用 NumPy 基本类型。
名称 | 描述 |
---|---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。
每个内建类型都有一个唯一定义它的字符代码如下:
1.2 数据类型对象 (dtype)
数据类型对象是用来描述与数组对应的内存区域如何使用,这依赖如下几个方面:
- 数据的类型(整数,浮点数或者 Python 对象)
- 数据的大小(例如, 整数使用多少个字节存储)
- 数据的字节顺序(小端法或大端法)
- 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段对应的内存块的区域
- 如果数据类型是子数组,它的形状和数据类型
字节顺序是通过对数据类型预先设定”<“或”>”来决定的。”<“意味着小端法(最高有效字节在最前面的方式称为大端法)。”>”意味着大端法(最低有效字节在最前面的方式成为小端法)。
小端与大端的区别:
字节顺序 | 高位字节存储位置 | 低位字节存储位置 |
---|---|---|
大端(Big-endian) | 低地址存高位字节 | 高地址存低位字节 |
小端(Little-endian) | 低地址存低位字节 | 高地址存高位字节 |
dtype 对象是使用以下语法构造的:
numpy.dtype(object, align, copy)
- object – 要转换为的数据类型对象
- align – 如果为 true,填充字段使其类似 C 的结构体。
- copy – 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
1.3 具体实例
实例 1:转换为int32
import numpy as np
dt = np.dtype(np.int32)
print(dt)
运行结果:
例 2:int8, int16, int32, int64 四种数据类型可以使用字符串 ‘i1’, ‘i2′,’i4′,’i8’ 代替
import numpy as np
dt = np.dtype('i4')
print(dt)
运行结果:
实例 3:字节顺序标注
import numpy as np
dt = np.dtype('<i4')
print(dt)
运行结果:
例 4:结构化数据类型
# 首先创建结构化数据类型
import numpy as np
dt = np.dtype([('age',np.int8)])
print(dt)
运行结果:
例 5:将数据类型应用于 ndarray 对象
import numpy as np
a = np.array([(10,),(20,),(30,)])
print(a)
print('-'*50)
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a)
运行结果:
例 6:类型字段名可以用于存取实际的 age 列
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a['age'])
运行结果:
例 7:下面的示例定义一个结构化数据类型 student,包含字符串字段 name,整数字段 age,及浮点字段 marks,并将这个 dtype 应用到 ndarray 对象。
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
print(student)
运行结果:
例8:
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
print(a)
运行结果:
二、Numpy数据类型转换
2.1 浮点数据转换
例1:生成一个浮点数组(浮点型默认是 float64
)
import numpy as np
a=np.random.random (4)
print(a)
print(a.dtype)
print(a.shape)
运行结果:
例2:改变dtype为 float32
,数组长度翻倍
import numpy as np
a=np.random.random (4)
a.dtype ="float32"
print(a)
print(a.dtype)
print(a.shape)#看下面有关shape的注释
运行结果:
shape
是 NumPy 中 ndarray
对象的一个属性,用于表示数组的维度(dimensions)和每个维度的大小(size)。它以元组的形式返回,元组的每个元素表示数组在相应维度上的大小。
shape
的含义
- 对于 一维数组,
shape
返回数组的长度(即元素的数量)。 - 对于 二维数组,
shape
返回一个元组,其中第一个元素表示数组的行数,第二个元素表示列数。 - 对于 三维及更高维数组,
shape
返回一个多元素的元组,其中每个元素表示数组在对应维度上的大小。
例3:改变dtype= float
,默认类型就是float64
,数组长度也变回最初的4
import numpy as np
a=np.random.random (4)
a.dtype ="float"
print(a)
print(a.dtype)
print(a.shape)
运行结果:
2.2 整型数据转换
把a变为整数 int64
,生成长度为4的整型数组
例4:
import numpy as np
a=np.random.random (4)
a.dtype="int64"
print(a)
print(a.dtype)
print(a.shape)
运行结果:
2.3 浮点数转整数
例5:
import numpy as np
b=np.array([1 ,2 ,3 ,4 ])
print(b.dtype)
运行结果:
例6:用 astype(int) 得到整数,并且不改变数组长度
import numpy as np
b=np.array([1 ,2 ,3 ,4 ],dtype=np.int32)
print(b)
print(b.shape)
print(b.dtype)
运行结果: