Numpy支持大量的维度数组与矩阵运算,也针对数组运算提供了大量的数学函数库。
包含内容:
1️⃣一个强大的 N 维数组对象ndarray;
2️⃣广播功能函数;
3️⃣整合C/C++/Fortran代码的工具;
4️⃣线性代数、傅里叶变换、随机数生成等功能。
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。
ndarray是一系列同类型数据和大小(通常固定大小)的集合,以0下标为开始进行集合中元素的索引。所以ndarray是用来存放同类型数据的多维数组,其中的每个元素在内存中都占有相同大小的存储区域。ndarray内部由以下内容组成:
一个指向数据(内存挥着内存映射文件中的一块数据)的指针;
数据类型或dtype,描述数组中的固定大小值的格子;
一个表示数组形状(shape)的元组,表示每个维度的大小;
这个元组由N个非负整数组成。
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要”跨过“的字节数。
与Python中的其他对象容器一样,可以通过对数组进行索引和切片以及通过ndarray的方法和属性来访问和修改。
不过不同的是,ndarary可以共享相同的数据,因此在一个ndarray中进行修改可能在另一个中可见。也就是说,ndarray可以是另一个ndarray的“view”,它所指的数据由“base”ndarray处理。
⁉️ndarray也可以是Python拥有的内存strings或实现buffer或数组接口的对象的视图。
内部结构示意图:
跨度可以是负数,这样会使数组在内存中向后移动。
创建ndarray:
numpy.array(object, dtype = None, copy = True,order = None, subok = False, ndmin = 0)
参数说明:
object:数组或者嵌套的列表;
dtype:数组元素的数据类型;
cpoy:可选参数,表示数组能否复制,默认True;
order:表示以哪种内存布局创建数组,有三个值可选(C行序列/F列序列/任意方向A)
subok:默认返回一个与基类类型一致的数组;
ndmin:指定生成数组的最小维度。
实例:
import numpy as np
a = np.array([[1, 2], [3, 4]], dtype=complex)
b = np.array([1, 2, 3, 4], ndmin=2)
print(a, type(a))
print("====")
print(b, type(b))
print(b.ndim)
运行结果:
[[1.+0.j 2.+0.j]
[3.+0.j 4.+0.j]] <class 'numpy.ndarray'>
====
[[1 2 3 4]] <class 'numpy.ndarray'>
2
ndarray对象由计算机内存的连续一堆部分组成,并结合索引模式,将每个元素映射到内存块中的每一个位置,内存块以行顺序或列顺序或MATLAB风格来保存元素。
数组的形状指的是数组的行数和列数。Numpy提供了reshape()函数来改变数组的行数和列数。
实例:
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = a.reshape(1, 4)
print(b, b.ndim)
print(b[0][1])
print(a.ndim)
运行结果:
[[1 2 3 4]] 2
2
2
判断数组的维度:判断数组维度
Numpy支持的数据类型比Python内置的数据 要多得多。
名称 | 类型 |
---|---|
bool_ | 布尔数据类型 |
int_ | 默认的整数类型,类似C语言中long,int32、int64 |
intc | 和C语言中的int类型一样,一般是int32或者int64 |
intp | 用于索引的整数类型,类似于C中色ssize_t,一般还是int32或int64 |
int8 | 一字节相同的8位整数,-128~127 |
int16 | 两字节(16位),-32768~32767 |
int32、int64 | 不多赘述 |
uint8 | 无符号整数 |
uint16.unit32、uint64 | 不多赘述 |
float_ | float64的简写 |
float16 | 半精度浮点数,包括1个符号位,5个指数位,10个尾数位 |
float32 | 单精度浮点数,包括1个符号位,8个指数位,23个尾数位 |
float64 | 双精度浮点数,包括1个符号位,11个指数位,52个尾数位 |
complex_ | 复数类型,与complex128相同 |
complex64 | 实部和虚部共享32位的数据类型 |
complex128 | 同理 |
str_ | 字符串类型 |
string_ | 字节串类型 |
dtype对象用来描述与数组对应的内存区域是如何使用的,它从以下几个方面进行了描述:
字节顺序是通过数据类型预先设定<
或>
来决定的。<
表示小端法,即最小值存储在最小的地址,也就是低位组放在最前面,>
相反。
所以dtype对象除了可以描述数组元素的数据类型、大小、字节顺序外,同时它也可以用来常见结构化数据。比如常见的int64、float32都是dtype对象的实例。
np.dtype(object,align,copy)
参数说明:
object:要转换为的数据类型对象
align:如果为True,填充字段使用类似于C的结构体;
copy:复制dtype对象,如果为False,则是对内置数据类型对象的引用。
实例:
import numpy as np
dt = np.dtype(np.bool_)
print(dt)
运行结果:
bool