Numpy库
基础
创建矩阵
- import numpy as np
- a1=np.array([1,2,3,4,5,6,7])
- print(a1)
- print(type(a1))
- a2=np.array(range(10))
- print(a2)
- print(type(a2))
- a3=np.arange(10)
- print(a3)
- print(type(a3))
- [1 2 3 4 5 6 7]
- <class 'numpy.ndarray'>
- [0 1 2 3 4 5 6 7 8 9]
- <class 'numpy.ndarray'>
- [0 1 2 3 4 5 6 7 8 9]
- <class 'numpy.ndarray'>
数据类型
-
-
- a4=np.array(range(1,11))
- print(a4)
- print(a4.dtype)
-
- a5=np.array(range(1,11),dtype="int64")
- print(a5)
- print(a5.dtype)
- a6=np.array([1,1,1,0,0,0,1],dtype="bool")
- print(a6)
- print(a6.dtype)
- [ 1 2 3 4 5 6 7 8 9 10]
- int32
- [ 1 2 3 4 5 6 7 8 9 10]
- int64
- [ True True True False False False True]
- bool
numpy矩阵元素为小数
- import random
-
-
- a7=np.array([10*random.random() for i in range(10)])
- print(a7)
- print(a7.dtype)
-
- a8=np.round(a7,2)
- print(a8)
- print(a8.dtype)
- [6.46665436 7.30882277 4.49303366 9.98697614 4.21035976 2.56750555
- 4.63963177 9.07470549 9.73631922 7.11534145]
- float64
- [6.47 7.31 4.49 9.99 4.21 2.57 4.64 9.07 9.74 7.12]
- float64
numpy矩阵的形状
-
- t1=np.array([1,2,3,4,5,6])
- print(t1.shape)
- t2=np.array([[1,2,3],[4,5,6]])
- print(t2.shape)
- t3=np.array([[[1,2,3],[4,5,6]],[[5,6,7],[8,9,10]]])
- print(t3.shape)
- t4=t3.reshape(3,4)#行*列必须等于矩阵元素个数 reshape()返回的是一个矩阵
- print(t4)
- t5=np.arange(24).reshape(2,3,4)
- print(t5)
-
-
-
- t6=t5.reshape(t5.shape[0]*t5.shape[1]*t5.shape[2])
- print(t6)
-
- t7=t5.flatten()
- print(t7)
- (6,)
- (2, 3)
- (2, 2, 3)
- [[ 1 2 3 4]
- [ 5 6 5 6]
- [ 7 8 9 10]]
- [[[ 0 1 2 3]
- [ 4 5 6 7]
- [ 8 9 10 11]]
-
- [[12 13 14 15]
- [16 17 18 19]
- [20 21 22 23]]]
- [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
- [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
numpy矩阵的运算
-
-
- t7=t7+2
- print(t7)
- t7=t7*2
- print(t7)
- t7=t7/2
- print(t7)
-
-
-
-
- t7=t7.reshape(4,6)
- t8=np.arange(6)
- t8=t7-t8
- print(t8)
- t9=np.arange(4).reshape(4,1)
- t9=t7-t9
- print(t9)
-
- t10=np.array(range(1,5)).reshape(4,1)
- t10=t7/t10
- print(t10)
- [ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]
- [ 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50]
- [ 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
- 20. 21. 22. 23. 24. 25.]
- [[ 2. 2. 2. 2. 2. 2.]
- [ 8. 8. 8. 8. 8. 8.]
- [14. 14. 14. 14. 14. 14.]
- [20. 20. 20. 20. 20. 20.]]
- [[ 2. 3. 4. 5. 6. 7.]
- [ 7. 8. 9. 10. 11. 12.]
- [12. 13. 14. 15. 16. 17.]
- [17. 18. 19. 20. 21. 22.]]
- [[2. 3. 4. 5. 6. 7. ]
- [4. 4.5 5. 5.5 6. 6.5 ]
- [4.66666667 5. 5.33333333 5.66666667 6. 6.33333333]
- [5. 5.25 5.5 5.75 6. 6.25 ]]
进阶
numpy的转置(假设a为矩阵)
- a.transpose()
- a.T
- a.swapaxes(1,0)#参数为taxi
numpy布尔索引
- a=a<10 返回元素为bool值的矩阵。
- 小于10为true,大于等于10为false
- a[a<10]=0 把矩阵中小于10的元素改为0
numpy的三元运算符
- np.where(a<x,x1,x2) 小于x的改为x1,大于等于x改为x2
numpy的裁剪clip
- a.clip(a,b)小于a的替换为a,大于b的替换为b
numpy的拼接
竖直拼接
- np.vstack((a,b)) a,b为两个矩阵
水平拼接
- np.hstack((a,b)) a,b为两个矩阵
numpy矩阵行列交换
- a[[x,y],:]=a[[y,x],:] x,y为交换的两行
- a[[1,2],:]=a[[2,1],:]
-
- a[:,[x,y]]=a[:,[y,x]] x,y为交换的两列
- a[:,[1,2]]=a[:,[y,x]]
numpy常用统计函数
求和sum
均值mean
- np.mean(a,axis=None) 求a的均值
中值median
- np.median(a,axis=None) 求a的中值
最大值max
最小值min
标准差sid 标准差越大代表数据跟平均值间波动越大
numpy创建0 1矩阵
创建全0矩阵
- np.zeros((x,y)) 创建一个x*y的全0矩阵
创建全1矩阵
- np.zeros((x,y)) 创建一个x*y的全1矩阵
创建对角线为1的方阵
- np.eye(x) 创建对角线为1的x\\*x方阵
numpy随机生成数
- .random.rand(d0,d1,...dn)创建d0...dn维度均为分布的随阵,浮点数(0-1))
- .random.randn(d0,d1,...dn)创建d0...dn维度标准正太分布的随阵,浮点数 平均数0,标准差1)
- .random.ranint(low,high,(shape))给定上下限随机整数范围为low,high,形状是shape
- .random.uniform(low,high,(size))产生有均匀分布的矩阵low为起始值,high为结束值,size为形状
- .random.normal(loc,scale,(size))从正态分布中随机抽取样本,分布中心是loc(均值),标准差是scale,形状是size)
- .random.seed(s) 随机数种子,s是给定种子值。每次产生相同值
numpy copy和view
- a=b 相互影响 两个矩阵有一个改变另一个跟着改变
- 视图 a=b[:] 一种切片,会创建新的对象a,但是a的数据由b保管,相互影响
- a=b.copy(),复制,a和b互不影响
numpy nan的注意点
- 两个nan互不相等 np.nan!=np.nan
-
- count=np.count_nonzero(a!=a) 返回矩阵中nan个数
-
- np.isnan(a)判断矩阵元素是否为nan 返回bool矩阵
-
- nan与任何值计算都为nan