学习内容来自菜鸟教程, 感谢菜鸟教程 🙇,如内容对您有帮助,欢迎点赞
Numpy简介
- NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
- NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
- NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
- Numpy应用
- NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
- SciPy 是一个开源的 Python 算法库和数学工具包。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
- Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。
Numpy的安装
- 使用pip:
pip install numpy scipy matplotlib
- 安装成功验证:
import numpy as np # 引入numpy数组
a = np.array([1,2,3,4])
print(a)
[1 2 3 4]
Numpy Ndarray对象
-
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
-
ndarray 对象是用于存放同类型元素的多维数组。
-
ndarray 中的每个元素在内存中都有相同存储大小的区域。
-
ndarray 内部由以下内容组成:
- 一个指向数据(内存或内存映射文件中的一块数据)的指针。
- 数据类型或 dtype,描述在数组中的固定大小值的格子。
- 一个表示数组形状(shape)的元组,表示各维度大小的元组。
- 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。
-
创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
- 参数说明
参数名称 | 参数描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
a = np.array([1, 2, 3, 4]) # 创建一维数组
print(a)
[1 2 3 4]
a = np.array([[1, 2], [3, 4]]) # 创建多维数组
print(a)
[[1 2]
[3 4]]
a = np.array([1, 2, 3, 4], ndmin = 2); # 指定维度
print("value:", a)
print("shape:" ,a.shape)
value [[1 2 3 4]]
shape: (1, 4)
a = np.array([1, 2, 3], dtype = complex) # 指定数据类型
print("value:", a)
print("type:", a.dtype)
value: [1.+0.j 2.+0.j 3.+0.j]
type: complex128
- ndarray 对象由计算机内存的连续一维部分组成,并结合索引模式,将每个元素映射到内存块中的一个位置。内存块以行顺序(C样式)或列顺序(FORTRAN或MatLab风格,即前述的F样式)来保存元素。
NumPy 数据类型
- numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。下表列举了常用 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,等等。
数据类型对象 (dtype)
- 数据类型对象是用来描述与数组对应的内存区域如何使用,这依赖如下几个方面:
- 数据的类型(整数,浮点数或者 Python 对象)
- 数据的大小(例如, 整数使用多少个字节存储)
- 数据的字节顺序(小端法或大端法)
- 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
- 如果数据类型是子数组,它的形状和数据类型
- 字节顺序是通过对数据类型预先设定"<“或”>“来决定的。”<“意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。”>"意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)。
- dtype 对象是使用以下语法构造的:
np.dtype(object, align, copy)
- object - 要转换为的数据类型对象
- align - 如果为 true,填充字段使其类似 C 的结构体。
- copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
# 使用内置类型
dt = np.dtype(np.int32)
print(dt)
int32
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
dt = np.dtype('i4')
print(dt)
int32
import numpy as np
# 字节顺序标注
dt = np.dtype('<i4')
print(dt)
int32
# 自定义结构化数据类型
dt = np.dtype([('name', str, 40),('age',np.int8)])
print('value:', dt)
value: [('name', '<U40'), ('age', 'i1')]
# 自定义结构化数据类型并应用于 ndarray 对象
dt = np.dtype([('name', str, 40),('age',np.int8)])
a = np.array([('alice', 18),('bob', 20),('jack', 19)], dtype = dt)
print('value:', a)
print('type:', a.dtype)
value: [('alice', 18) ('bob', 20) ('jack', 19)]
type: [('name', '<U40'), ('age', 'i1')]
# 类型字段名可以用于存取单独一列
dt = np.dtype([('name', str, 40),('age',np.int8)])
a = np.array([('alice', 18),('bob', 20),('jack', 19)], dtype = dt)
print('value:', a)
print('type:', a.dtype)
print('names:', a['name'])
print('age:', a['age'])
value: [('alice', 18) ('bob', 20) ('jack', 19)]
type: [('name', '<U40'), ('age', 'i1')]
names: ['alice' 'bob' 'jack']
age: [18 20 19]
学习内容来自菜鸟教程, 感谢菜鸟教程 🙇,如内容对您有帮助,欢迎点赞