Numpy学习
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
以下记录自己学习NumPy的笔记。
numpy.array基础
1  | import numpy as np  | 
python list的特点
不对类型做具体的限定
1  | L = [i for i in range(10)]  | 
python中限定只能存储一种类型的数组如下:
1  | import array  | 
numpy.array
基础操作
1  | # 列表初始化  | 
int定义浮点会自动去位
创建0数组或0矩阵
1  | np.zeros(10).dtype  | 
创建指定数字的矩阵
1  | np.full(shape=(3, 5), fill_value=666.)  | 
arange 调用list创建矩阵
1  | [i for i in range(0, 10, 2)]  | 
起始,终止(左闭右开),步长
1  | np.arange(0, 1, 0.2)  | 
linspace 在范围内(包含前后),截取x个数
1  | np.linspace(0, 20, 10)  | 
生成随机数(左闭右开)
1  | np.random.randint(4, 8, 10)  | 
指定随机种子
1  | np.random.seed(666)  | 
随机浮点数
1  | np.random.random((3,5))  | 
符合正态分布的随机数
1  | np.random.normal()  | 
数组的基本属性
1  | X = np.arange(15).reshape(3, 5)  | 
查看数组维度
1  | X.ndim --> 2  | 
数组读取数据
1  | X[2,2] --> 12  | 
numpy分片没有创建新矩阵,修改子矩阵会修改原矩阵
构造不相关的子矩阵,如下
1  | subX = X[:2, :3].copy()  | 
Reshape升维
1  | x = np.arange(10)  | 
矩阵的合并与分割
合并
1  | x = np.array([1,2,3])  | 
向量合并
1  | np.concatenate([x,y])  | 
二维数组合并
1  | A = np.array([[1,2,3],  | 
axis默认为0,表示竖着拼接;axis=1 表示沿着第二个维度进行拼接(横着拼接)
跨维度合并
1  | z = np.array([666,666,666])  | 
垂直方向进行叠加
1  | np.vstack([A,z])  | 
水平方向进行叠加
1  | B = np.full((2,2), 100)  | 
1  | np.hstack([A, B])  | 
分割操作
1  | x = np.arange(0, 10)  | 
多维默认以行分割
1  | A = np.arange(16).reshape(4,4)  | 
1  | A1, A2 = np.split(A, [2])  | 
以列分割
1  | A1, A2 = np.split(A, [2], axis=1)  | 
矩阵的运算
给定一个向量,让向量中每一个数乘以2
a = (0,1,2)
a*2 = (0,2,4)
1  | n = 10  | 
方法1:list
1  | A = [2*e for e in L]  | 
方法2:numpy
1  | import numpy as np  | 
Universal Functions
1  | X = np.arange(1,16).reshape((3,5))  | 
1  | 运算+-*/(浮点除)//(整数除)  | 
1  | # 求余  | 
矩阵对应元素做运算
加减乘除
1  | A = np.arange(4).reshape(2, 2)  | 
标准矩阵乘法
1  | A.dot(B)  | 
矩阵的转置
1  | A.T  | 
向量和矩阵之间的运算
1  | v = np.array([1,2])  | 
加法:向量和矩阵中的每个行做加法
1  | v+A  | 
向量堆叠tile
1  | np.tile(v,[2,1])  | 
乘法:矩阵的每个元素和向量每个元素相乘再相加
1  | v.dot(A)  | 
矩阵的逆
1  | invA = np.linalg.inv(A)  | 
矩阵一定要是方阵才有逆矩阵
伪逆矩阵
1  | x = np.arange(16).reshape(2, 8)  | 
聚合操作
把一组值变成一个值
1  | import numpy as np  | 
求和
1  | np.sum(x)  | 
求每一列的和
1  | np.sum(x, axis=0) -->  | 
求每一行的和
1  | np.sum(x, axis=1) -->  | 
百分位点求值
1  | np.percentile(x,q=50)  | 
索引
1  | new = np.random.normal(0,1, size=10)  | 
排序使用索引
1  | x = np.arange(16)  | 
按照索引有序排列
1  | np.argsort(x)  | 
标定点(标定点前都比他小,后都比他大)
1  | np.partition(x,7)  | 
矩阵排序
1  | #x = np.random.randint(16,size=(4,4))  | 
Fancy Indexing
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DropAnn!

