注:Python的NumPy模块是一个非常强大的开源科学计算库,它在数据处理、科学计算、机器学习、图像处理等领域有着广泛的应用。
'''
numpy模块的数值计算等操作和torch模块非常相似
np.linalg子模块、np.fft子模块、np.random子模块
'''
主要作用是:多维数组对象的各种操作以及各种科学计算机制
1.提供多维数组对象
1.数组的创建:np.array(),创建数组或者将列表、元组或者其他数据类型转换为numpy数组
2.数组的形状变换:arr.reshape()、arr.T、arr.tolist()
3.数组的索引和切片
4.数组的各种操作:numpy.reshape();numpy.expand_dims();numpy.squeeze();
####数组创建和数组变换
import numpy as np
A = np.array([[1,2,3],[4,5,6]])
B = A.reshape(3,2)
C = A.T
D = A.tolist()
####数组切片
#一维数组切片
A1 = [1,2,3,4,5,6,7,8,9]
B1 = A1[0:1] ##前闭后开
print(B1)
#多维数组切片
An= np.array([[1,2,3],[4,5,6]])
Bn = An[1:,0:1]
print(Bn)
2.支持广播机制
规则1:如果两个数组的维度不同,那么就在维度比较小的数组的第0维度补充维度1,直到维度相同
规则2:如果两个数组的形状在任何维度上都不匹配,但其中一个维度大小是1,那么扩展这个维度匹配另一个维度的大小
规则3:如果两个数组的形状在任何维度上都不匹配,而且没有维度大小为1,那么会引发广播错误
####情况1:
import numpy as np
arr1 = np.array([1, 2, 3]) # 形状为 (3,)
arr2 = np.array([[4], [5], [6]]) # 形状为 (3, 1)
# 通过广播机制,arr1 会被视为 (1, 3)(规则1),然后与 arr2 的 (3, 1) 进行广播,arr2会变成(3, 3)(规则2)
result = arr1 + arr2
# result = array([[ 5, 6, 7],
# [ 6, 7, 8],
# [ 7, 8, 9]])
####情况2:
arr1 = np.array([1, 2, 3]) # 形状为 (3,)
arr2 = np.array([[4, 5, 6]]) # 形状为 (1, 3)
# 通过广播机制,arr1 会被视为 (1, 3),然后与 arr2 的 (1, 3) 进行广播,得到 (1, 3)
result = arr1 + arr2
# result = array([[5, 7, 9]])
3.广泛的线性代数运算
1.矩阵运算:np.dot(A,B);np.matmul(A,B);np.vdot(复数);np.inner(内积);np.outer(外积)
2.矩阵求逆:np.linalg.inv(A)
3.矩阵分解:np.linalg.svd(A); w,v = np.linalg.eig(A)(特征值)(特征向量);w,v = np.linalg.eigh(A)(Hermitian矩阵)
4.解线性方程组:np.linalg.solve(A,b)
主要是np.linalg子模块
4.高效的数学函数库
大多数高效的数学函数库是在numpy主模块中
1.基本的数学运算:数组元素级别的加减乘除
2.统计函数:均值,中位数,方差等
3.排序和搜索:在np的主模块当中
4.三角函数
5.各种函数:三角函数,双曲函数,特殊函数
6.傅里叶变换:np.fft子模块
7.随机数生成:np.random子模块
7.1:基本随机数:np.random.rand;np.random.randint;np.random.randn
7.2:分布函数:numpy.random.normal(loc=0.0, scale=1.0, size=None) 均值,期望和形状
注意:在torch模块中,生成随机数是在torch主模块,torch模块不像numpy那样存在一个子模块random专门用于生成随机数