01.numpy模块 https://www.cnblogs.com/nickchen121/p/10807564.html numpy模块简介 numpy是python的一种开源数值计算扩展库。这种库可以用来存储和处理大型numpy数组,比python自身的嵌套列表结构要高效的
01.numpy模块
https://www.cnblogs.com/nickchen121/p/10807564.html
numpy模块简介
numpy是python的一种开源数值计算扩展库。这种库可以用来存储和处理大型numpy数组,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)
numpy库的两个作用
- 提供了数组间的操作、运算、统计分布和简单的数学模型
- 计算速度快,甚至要优于python内置的简单运算,使其成为pandas、sklearn等模块以来的包。高级的框架如TensorFlow、PyTorch等。其数组操作也和numpy非常相似
numpy的用法
创建numpy数组 # 三维及以上不推荐使用numpy
numpy数组即numpy的内部定义的ndarray对象,创建numpy数组就是把一个list传入np.array()
import numpy as np arr = np.array([1,2,3]) # 创建一维的ndarray对象 print(arr,arr.dtype,type(arr)) ar2 = np.array([[1.,2,3],[2,3,4]]) # 创建二维的ndarray对象 print(ar2,ar2.dtype,type(ar2)) ar3 = np.array([[[1,2,3]],[[4,5,6]],[[7,8,9]]]) # 创建三维的ndarray对象 print(ar3,'\n','维数:',ar3.ndim) ar33 = np.array([[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]]) # 创建三维的ndarray对象 print(ar33,'\n','维数:',ar33.ndim)
[1 2 3] int64 <class 'numpy.ndarray'> # 列表内元素全为int时,数组元素的数据类型为int64 [[1. 2. 3.] [2. 3. 4.]] float64 <class 'numpy.ndarray'> # 列表内元素有一个位为flaot时,数组元素的数据类型为flaot64 [[[1 2 3]] [[4 5 6]] [[7 8 9]]] 维数: 3 [[[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [4 5 6] [7 8 9]]] 维数: 3
numpy数组的常用属性
属性 解释 T 数组的转置(对高维数组而言) dtype 数组元素的数据类型 size 数组元素的个数 ndim 数组的维数 shape 数组的维度大小(以元组形式) astype 类型转换dtype种类:bool_, int(8,16,32,64), float(16,32,64)
用法
# T import numpy as np ar2 = np.array([[1.,2,3],[2,3,4]]) print(ar2,'\n',ar2.T)
[[1. 2. 3.] [2. 3. 4.]] [[1. 2.] [2. 3.] [3. 4.]]
# dtype import numpy as np ar2 = np.array([[1.,2,3],[2,3,4]]) print(ar2.dtpye) # flaot64
# size import numpy as np ar2 = np.array([[1.,2,3],[2,3,4]]) print(ar2.size) # 6
# ndim import numpy as np ar2 = np.array([[1.,2,3],[2,3,4]]) print(ar2.ndim) # 2
# shape 获取数组的维度大小,以元组的形式存储 # 可以用来获取数组的行列数 import numpy as np arr = np.array([1.,2.,3.]) print('arr:',arr.shape) ar2 = np.array([[1.,2,3],[2,3,4]]) print('ar2:',ar2.shape) ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]]) print('ar3:',ar33.shape)
arr: (3,) ar2: (2, 3) ar3: (3, 3, 4)
# astype # 数组数据类型转换 # dtype种类:bool_, int(8,16,32,64), float(16,32,64) import numpy as np arr = np.array([1,2,3]) arr.astype(np.float32) print(arr) # [1 2 3]
切割numpy数组
# numpy数组的切分与列表的切分方法相同 import numpy as np ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]]) print(ar33[:,:1,:1]) # []中有几个参数看numpy数组是几维,然后以 层->行->列 的顺序输入 不填默认所有
[[[1]] [[1]] [[1]]]
# 通过条件筛选数值 or 判断数值 import numpy as np ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]]) print(ar33[ar33>2]) print(ar33>2)
[3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 6 7 8 9] [[[False False True False] [False True True True] [False True True True]] [[False False False True] [False True True True] [False True True True]] [[False False False True] [False True True True] [False True True True]]]
numpy数组的元素替换
# 相当于列表的索引替换值 import numpy as np ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]]) ar33[:,:1,:1]=22 print(ar33)
[[[22 2 3 1] [ 1 4 5 6] [ 1 7 8 9]] [[22 1 2 3] [ 1 4 5 6] [ 1 7 8 9]] [[22 1 2 3] [ 1 4 5 6] [ 1 7 8 9]]]
numpy数组的合并
# hstack()方法 # 使用该方法需要保证合并的两个数组行数相同,其中hstack的h表示horizontal水平的 import numpy as np ar2 = np.array([[1.,2,3],[2,3,4]]) ar3 = np.array([[1.,2],[2,4]]) print(ar2) print(ar3) ar23 = np.hstack((ar2,ar3)) print(ar23)
[[1. 2. 3.] [2. 3. 4.]] [[1. 2.] [2. 4.]] [[1. 2. 3. 1. 2.] [2. 3. 4. 2. 4.]]
# concatenate(要合并元组,axis=1) # axis=1表示合并两个数组的行,axis=0表示合并列,默认列 import numpy as np ar2 = np.array([[1.,2,3],[2,3,4]]) ar3 = np.array([[1.,2,3],[2,4,4]]) print(ar2) print(ar3) ar23 = np.concatenate((ar2,ar3),axis=1) print(ar23)
[[1. 2. 3.] [2. 3. 4.]] [[1. 2. 3.] [2. 4. 4.]] [[1. 2. 3. 1. 2. 3.] [2. 3. 4. 2. 4. 4.]]
# vstack()方法,使用该方法数组中要有相同的列,v表示vetical垂直的 import numpy as np ar2 = np.array([[1.,2,3],[2,3,4]]) ar3 = np.array([[1.,2,3],[2,4,4]]) print(ar2) print(ar3) ar23 = np.vstark((ar2,ar3)) print(ar23)
[[1. 2. 3.] [2. 3. 4.]] [[1. 2. 3.] [2. 4. 4.]] [[1. 2. 3.] [2. 3. 4.] [1. 2. 3.] [2. 4. 4.]]
通过函数创建numpy数组
方法 详解 array() 将列表转换为数组,可选择显式指定dtype arange() range的numpy版,支持浮点数 linspace() 类似arange(),第三个参数为数组长度 zeros() 根据指定形状和dtype创建全0数组 ones() 根据指定形状和dtype创建全1数组 eye() 创建单位矩阵 empty() 创建一个元素全随机的数组 reshape() 重塑形状# arange() print(np.arange(10)) # 构造从0到9的一维数组 print(np.arange(1,6)) # 构造从1到5的一维数组 print(np.arange(1, 20, 2)) # 构造1-19且步长为2的ndarray数组
[0 1 2 3 4 5 6 7 8 9] [1 2 3 4 5] [ 1 3 5 7 9 11 13 15 17 19]
# linspace/logspace # 等差/等比 # 等比默认以10为底数 输出默认float64 print(np.linspace(0,20,5)) # 构造一个等比数列,从0到20取5个数 print(np.logspace(0,4,5)) # 构造一个等差数列,从10**0到10**4取5个数
[ 0. 5. 10. 15. 20.] [ 1. 10. 100. 1000.]
# 构造3*4的全0numpy数组 print(np.zeros((3, 4)))
[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]
# 构造3*4的全1numpy数组 print(np.ones((3, 4)))
[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
# 构造3个主元的单位numpy数组 print(np.eye(3))
[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]
# 构造一个4*4的随机numpy数组,里面的元素是随机生成的 print(np.empty((4, 4))) [[ 2.31584178e+077 -1.49457545e-154 3.95252517e-323 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 1.29074055e-231 1.11687366e-308]]
arr = np.ones([2,2],dtype=int) print(arr.reshape(4,1)) # reshape 对行列数进行修改
数组运算
运算符 说明 + 两个numpy数组对应元素相加 - 两个numpy数组对应元素相减 * 两个numpy数组对应元素相乘 / 两个numpy数组对应元素相除,如果都是整数则取商 % 两个numpy数组对应元素相除后取余数 **n 单个numpy数组每个元素都取n次方,如**2:每个元素都取平方arrarr1 = np.array([[1, 2], [3, 4], [5, 6]]) print(arr1)
[[1 2] [3 4] [5 6]]
arr2 = np.array([[7, 8], [9, 10], [11, 12]]) print(arr2)
[[ 7 8] [ 9 10] [11 12]]
print(arr1 + arr2)
[[ 8 10] [12 14] [16 18]] print(arr1**2) [[ 1 4] [ 9 16] [25 36]]
numpy数组运算函数
numpy数组函数 详解 np.sin(arr) 对numpy数组arr中每个元素取正弦,sin(x)sin(x) np.cos(arr) 对numpy数组arr中每个元素取余弦,cos(x)cos(x) np.tan(arr) 对numpy数组arr中每个元素取正切,tan(x)tan(x) np.arcsin(arr) 对numpy数组arr中每个元素取反正弦,arcsin(x)arcsin(x) np.arccos(arr) 对numpy数组arr中每个元素取反余弦,arccos(x)arccos(x) np.arctan(arr) 对numpy数组arr中每个元素取反正切,arctan(x)arctan(x) np.exp(arr) 对numpy数组arr中每个元素取指数函数,exex np.sqrt(arr) 对numpy数组arr中每个元素开根号x??√一元函数:abs, sqrt, exp, log, ceil, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan
二元函数:add, substract, multiply, divide, power, mod, maximum, minimum
使用方法还有很多,现阶段不进行学习
matplotlib模块:画图
01条形图
from matplotlib import pyplot as plt # 约定俗成 from matplotlib.font_manager import FontProperties # 修改字体 font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc') plt.style.use('ggplot') # 设置背景 clas = ['3班', '4班', '5班', '6班'] students = [50, 55, 45, 60] clas_index = range(len(clas)) # [0,1,2,3] [50,55,45,60] plt.bar(clas_index,students,color='darkblue') plt.xlabel('学生',fontproperties=font) plt.ylabel('学生人数',fontproperties=font) plt.title('班级-学生人数',fontproperties=font,fontsize=20,fontweight=25) plt.xticks(clas_index,clas,fontproperties=font) plt.show()
02.直方图
import numpy as np from matplotlib import pyplot as plt # 约定俗成 from matplotlib.font_manager import FontProperties # 修改字体 font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc') plt.style.use('ggplot') x1 = np.random.randn(10000) x2 = np.random.randn(10000) fig = plt.figure() # 生成一张画布 ax1 = fig.add_subplot(1, 2, 1) # 1行2列取第一个 ax2 = fig.add_subplot(1, 2, 2) ax1.hist(x1, bins=50,color='darkblue') ax2.hist(x2, bins=50,color='y') fig.suptitle('两个正太分布',fontproperties=font,fontsize=20) ax1.set_title('x1的正太分布',fontproperties=font) # 加子标题 ax2.set_title('x2的正太分布',fontproperties=font) plt.show()
03.折线图
import numpy as np from matplotlib import pyplot as plt # 约定俗成 from matplotlib.font_manager import FontProperties # 修改字体 font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc') plt.style.use('ggplot') np.random.seed(10) x1 = np.random.randn(40).cumsum() x2 = np.random.randn(40).cumsum() x3 = np.random.randn(40).cumsum() x4 = np.random.randn(40).cumsum() plt.plot(x1, c='r', linestyle='-', marker='o', label='红圆线') plt.plot(x2, color='y', linestyle='--', marker='*', label='黄虚线') plt.plot(x3, color='b', linestyle='-.', marker='s', label='蓝方线') plt.plot(x4, color='black', linestyle=':', marker='s', label='黑方线') plt.legend(loc='best', prop=font) # 显示label plt.show()
04.散点图+直线图
import numpy as np from matplotlib import pyplot as plt # 约定俗成 from matplotlib.font_manager import FontProperties # 修改字体 font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc') plt.style.use('ggplot') fig = plt.figure() ax1 = fig.add_subplot(1, 2, 1) ax2 = fig.add_subplot(1, 2, 2) x = np.arange(20) y = x ** 2 x2 = np.arange(20) y2 = x2 ax1.scatter(x, y, c='r', label='红') ax1.scatter(x2, y2, c='b', label='蓝') ax2.plot(x, y) ax2.plot(x2, y2) fig.suptitle('两张图', fontproperties=font, fontsize=15) ax1.set_title('散点图', fontproperties=font) ax2.set_title('折线图', fontproperties=font) ax1.legend(prop=font) plt.show() # 以上只是基础中的基础