Numpy
1.introduce
- Numerical Python 是 Python 语言的一个扩展程序库,支持大量的多维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
- NumPy有两种数据结构,numpy.ndarray和numpy.matrix。ndarray是N 维数组对象 ,matrix是二维矩阵对象。
- ndarray和matrix是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
2.matrix
-
matrix创建
n = np.matrix([1, 2, 4]) print(n) m = np.matrix([[1, 2], [3, 4]]) print(m) # np.matrix接收的参数必须是一维或二维的,且返回的是二维矩阵
Note:matrix是一种特定维度的ndarray,和ndarray使用方法相同,参考下面ndarray使用方法即可。
3. ndarray
-
ndarray创建
np.array(),用list或tuple创建ndarray
a = [1, 2, 3] b = np.array(a) print(a) # [1, 2, 3] print(b) # [1 2 3] c = np.array([[1, 2, 3], [4, 5, 6]]) print(c) # [[1 2 3] # [4 5 6]] d = np.array([[1, 2, 3], [4, 5]]) print(d) # [list([1, 2, 3]) list([4, 5])] e = np.array([1, 2, 3]*3) print(e) # [1 2 3 1 2 3 1 2 3] # numpy.array接收的参数,可以是各种维度的list, tuple # ndarray数组各元素之间没有逗号 # 当list能构成一个矩阵时,转化后的numpy将是一个矩阵。 # 当list不能构成一个矩阵,即list内list长度不一,转化后的numpy的元素为list。 -
特殊ndarray数组生成
-
等比数列ndarray
n1 = np.arange(0, 20, 2) # 起,末,间隔 (左闭右开) print(n1) # [ 0 2 4 6 8 10 12 14 16 18] # 是arange 而不是 arrange, 元素为int -
全 0/1 ndarray数组
n2 = np.zeros((2, 2)) print(n2) # [[1. 1.] # [1. 1.]] n3 = np.ones((2, 2)) print(n3) # 参数为元组,要加() # ndarray数组内部元素为浮点型 -
同维度ndarray数组
n4 = np.ones_like(n2) print(n4) n5 = np.zeros_like(n2) print(n5)
-
-
ndarray数组重构
n = np.arange(0, 20, 2) print(n.shape) # (10,) n1 = n.reshape(2, 5) print(n1) # [[ 0 2 4 6 8] # [10 12 14 16 18]] print(n1.shape) # (2, 5) -
ndarray数组运算
-
ndarray数组和常数运算
#### (1 ndarray数组和常数算术运算 + - * / ** // # 对ndarray数组中每个元素与常数进行运算 n = np.arange(0, 5) print(n*5, n+5, n//2) # [0 5 10 15 20] [5 6 7 8 9] [0 0 1 1 2] #### (2 ndarray数组和常数逻辑运算 == > < >= <= # 对ndarray数组中每个元素与常数进行比较,返回的ndarray数组的元素为bool型 a = np.arange(20).reshape(4, 5) print(a>0) # [[False True True True True] # [ True True True True True] # [ True True True True True] # [ True True True True True]] -
ndarray数组之间运算
#### (3 ndarray数组之间运算 + - * / ** // ######## 要求运算的两ndarray数组维度相同,然后对应元素运算,结果维度不变 n = np.arange(0, 10).reshape(2, 5) print(n) print(n*n) -
numpy矩阵乘法
#### (4 numpy矩阵乘法 # 分为元素乘法和矩阵乘法,区别于向量的点乘(内积)和叉乘 # 元素乘法:np.mutiply(a, b) # 矩阵乘法:np.dot(a, b) 或a.dot(b) 或 np.matmul(a,b) # * ,在np.array中被重载为元素乘法, 在np.matrix中被重载为矩阵乘法 a = np.arange(0, 8).reshape(2, 4) b = np.arange(0, 8).reshape(4, 2) print(a*a) # 元素乘法 print(a.dot(b), np.matmul(a, b), sep='\n') # 矩阵乘法 a = np.matrix(a) b = np.matrix(b) print(a*b) # 矩阵乘法 print(a.dot(b), np.matmul(a, b), sep='\n') # 矩阵乘法 -
-
ndarray数组切片, 过滤
-
切片
## 逗号隔开不同的维度,某维度若省略,或用:示意,则全选 ## 对于每一个维度,用a:b的形式,选择索引a到b, 若省略:,则选择索引a到最后,若省略:b,则仅选择该维度上的索引a n = np.arange(0, 20).reshape(4, 5) print(n[1], n[1, ], n[1, :], sep='\n') print(n[1:], n[1:, ], n[1:, :], sep='\n') n[1] = 0 n[2:, 2:] = 0 print(n) -
过滤
'''过滤''' a = np.arange(20).reshape(4, 5) print(a) # [[ 0 1 2 3 4] # [ 5 6 7 8 9] # [10 11 12 13 14] # [15 16 17 18 19]] print(a[a>10]) # [11 12 13 14 15 16 17 18 19] a[a==0] = 111 print(a) # [[111 1 2 3 4] # [ 5 6 7 8 9] # [ 10 11 12 13 14] # [ 15 16 17 18 19]]
-
-
numpy常用函数
a = np.arange(0, 20).reshape(4, 5) print(a) print(a.sum()) print(a.max()) print(a.min()) print(a.mean()) print(a.std()) print(a.argmax()) # 最大元素的索引 print(a.argmin()) # 不论a的维度,默认返回是一个数 print(a.sum(0)) print(a.sum(1)) # axis参数为求和的维度,对什么维度求和,则将此维度各元素想加。 # 若为0,求和的对象是0维度上的所有向量,即[0 1 2 3 4] + [5 6 7 8 9] + [10 11 12 13 14] + [15 16 17 18 19] # 若为1,求和对象为1维度上所有元素,即[0+1+2+3+4 5+6+7+8+9 10+11+12+13+14 30+34+38+42+46] # 其他函数的axis参数用法也类似