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!