当前位置:   article > 正文

机器学习-数据科学库(第三天)_ numpy

numpy

14.numpy的数组的创建

什么是numpy

一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算(数组就是列表、列表嵌套列表等)

  1. import numpy as np
  2. t1 = np.array([1,2,3])
  3. print(t1)
  4. print(type(t1))
  5. t2 = np.array(range(10))
  6. print(t2)
  7. t3 = np.arange(10)
  8. print(t3)
  9. print(t3.dtype)
  1. [1 2 3]
  2. <class 'numpy.ndarray'>
  3. [0 1 2 3 4 5 6 7 8 9]
  4. [0 1 2 3 4 5 6 7 8 9]
  5. int64

  1. import numpy as np
  2. t1 = np.array(range(10),dtype="float64")
  3. print(t1)
  4. print(t1.dtype)
  5. t2 = t1.astype("int8")
  6. print(t2.dtype)
  1. [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
  2. float64
  3. int8
  1. t3 = np.array([random.random() for i in range(10)])
  2. print(t3)
  3. print(t3.dtype)
  4. t4 = np.round(t3,2)
  5. print(t4)
  1. [0.15551533 0.00401583 0.15190568 0.8632606 0.26929546 0.64721247
  2. 0.40041603 0.18216162 0.36326966 0.80083215]
  3. float64
  4. [0.16 0. 0.15 0.86 0.27 0.65 0.4 0.18 0.36 0.8 ]

15.数组的计算和数组的计算

数组的形状

  1. import numpy as np
  2. t1 = np.arange(12)
  3. print(t1)
  4. print(t1.shape)
  5. t2 = np.array([[1,2,3],[5,4,6]])
  6. print(t2.shape)
  7. t3 = np.array([[[1,2,3],[5,4,6]],[[2,2,5],[5,7,3]]])
  8. print(t3.shape)
  9. t4 = np.arange(12)
  10. print(t4.reshape((3,4)))
  11. t5 = np.arange(24).reshape((2,3,4))
  12. print(t5)
  13. print(t5.flatten())
  1. [ 0 1 2 3 4 5 6 7 8 9 10 11]
  2. (12,)
  3. (2, 3)
  4. (2, 2, 3)
  5. [[ 0 1 2 3]
  6. [ 4 5 6 7]
  7. [ 8 9 10 11]]
  8. [[[ 0 1 2 3]
  9. [ 4 5 6 7]
  10. [ 8 9 10 11]]
  11. [[12 13 14 15]
  12. [16 17 18 19]
  13. [20 21 22 23]]]
  14. [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

数组和数的计算

 广播原则

 

16.numpy读取本地数据

轴(axis)

在numpy中可以理解为方向,使用0,1,2...数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2,3)),有0,1,2轴

 

numpy读取数据

CSV:Comma-Separated Value,逗号分隔值文件 显示:表格状态 源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录 由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False) 

unpack为转置,默认为False

numpy中的转置

17.numpy中的索引和切片

numpy中的索引和切片

  1. import numpy as np
  2. a = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
  3. print(a[1])
  4. #取第一行,第三行
  5. print(a[[0,2]])
  6. print(a[1:])
  7. #取列
  8. print(a[:,0])
  9. print(a[:,[0,2]])
  10. print(a[2,3])
  11. print(type(a[2,3]))
  12. #取多行多列,取第2行到第三行,第2列到第三列
  13. #取的是行列的交叉点位置
  14. b = a[1:3,1:3]
  15. #取多个不相邻的点
  16. c = a[[0,1],[0,3]]
  17. print(c)
  18. #取得点是 (0,0)(1,3)
  1. [4 5 6 7]
  2. [[ 0 1 2 3]
  3. [ 8 9 10 11]]
  4. [[ 4 5 6 7]
  5. [ 8 9 10 11]]
  6. [0 4 8]
  7. [[ 0 2]
  8. [ 4 6]
  9. [ 8 10]]
  10. 11
  11. <class 'numpy.int64'>
  12. [0 7]

18.numpy中更多的索引方式

numpy中数值的修改

 

np.where(t>10,20,0) 把t中大于10的替换成20,其他的替换为0

numpy中的clip(裁剪) 

 

t里边小于10的换成10,大于18的换成18,nan是浮点类型 

19.numpy中的nan和常用统计方法

 numpy中的nan的注意点

nan(NAN,Nan):not a number表示不是一个数字

什么时候numpy中会出现nan:      

当我们读取本地的文件为float的时候,如果有缺失,就会出现nan当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)  

  1. import numpy as np
  2. t3 = np.arange(12).reshape((3,4))
  3. print(t3)
  4. print(np.sum(t3))
  5. print(np.sum(t3,axis=0))
  6. print(np.sum(t3,axis=1))
  1. [[ 0 1 2 3]
  2. [ 4 5 6 7]
  3. [ 8 9 10 11]]
  4. 66
  5. [12 15 18 21]
  6. [ 6 22 38]

那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?

比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行

  1. import numpy as np
  2. t2=np.array([[0,3,3,3,3,3],
  3. [0,3,3,3,10,11],
  4. [0,13,14,15,16,17],
  5. [0,19,20,11,20,20]])
  6. print(t2.sum(axis=0))
  7. print(t2.mean(axis=0))
  8. print(t2.max(axis=0))
  9. print(t2.min(axis=0))
  10. print(np.median(t2,axis=0))
  11. print(np.ptp(t2)) #极值,最大值和最小值之差
  12. print(t2.std()) #标准差
  1. [ 0 38 40 32 49 51]
  2. [ 0. 9.5 10. 8. 12.25 12.75]
  3. [ 0 19 20 15 20 20]
  4. [0 3 3 3 3 3]
  5. [ 0. 8. 8.5 7. 13. 14. ]
  6. 20
  7. 7.281540587906747

20.numpy中填充nan和youtube数据的练习

缺失值填充均值

  1. import numpy as np
  2. t1 = np.arange(12).reshape((3,4)).astype("float")
  3. t1[1,2:] = np.nan
  4. print(t1)
  5. for i in range(t1.shape[1]):
  6. temp_col = t1[:,i] #当前的一列
  7. nan_num = np.count_nonzero(temp_col!=temp_col)
  8. if nan_num !=0: #不为0,说明当前这一列中有nan
  9. tem_not_nan_col = temp_col[temp_col==temp_col] #当前一列不为nan的array
  10. temp_col[np.isnan(temp_col)] = tem_not_nan_col.mean()
  11. print(t1)
  1. [[ 0. 1. 2. 3.]
  2. [ 4. 5. nan nan]
  3. [ 8. 9. 10. 11.]]
  4. [[ 0. 1. 2. 3.]
  5. [ 4. 5. 6. 7.]
  6. [ 8. 9. 10. 11.]]

21.数据的拼接

数据的拼接

    

 数组的行列交换

22.numpy中的随机方法

数据拼接例子

现在希望把之前案例中两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办?

  1. import numpy as np
  2. us_data = ""
  3. uk_data = ""
  4. #加载国家数据
  5. us_data = np.loadtxt(us_data,delimiter=",",dtype = int)
  6. uk_data = np.loadtxt(us_data,delimiter=",",dtype = int)
  7. #添加国家信息
  8. #构造全为0的数据
  9. zeros_data = np.zeros(us_data.shape[0],1).astype(int)
  10. ones_date = np.ones(ukss_data.shape[0],1).astype(int)
  11. #分别添加一列全为0,1的数据
  12. us_data = np.hstack((us_data,zeros_data))
  13. uk_data = np.hstack((uk_data,ones_date))

numpy更多好用的方法

  1. 获取最大值最小值的位置                                                                                                        每一列最大值位置:np.argmax(t,axis=0)   每一行最大值的位置:np.argmin(t,axis=1)
  2. 创建一个全0的数组: np.zeros((3,4))
  3. 创建一个全1的数组:np.ones((3,4))
  4. 创建一个对角线为1的正方形数组(方阵):np.eye(3)

numpy生成随机数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/142385?site
推荐阅读
相关标签
  

闽ICP备14008679号