Matplotlib 和numpy 基础学习笔记

您所在的位置:网站首页 Matplotlib包主要用于 Matplotlib 和numpy 基础学习笔记

Matplotlib 和numpy 基础学习笔记

2024-07-11 23:31| 来源: 网络整理| 查看: 265

Matplotlib 和 numpy 基础学习笔记 一、numpy、scipy、matplotlib简介及环境安装

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 是一个开源的 Python 算法库和数学工具包,SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

环境安装:Anaconda(下载途径一 官方地址:https://www.anaconda.com/download/ 下载途径二 清华开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D)) pycharm (官方下载地址: https://www.jetbrains.com/pycharm/download/#section=windows)

二、Matplotlib 常用统计图比较 折线图 以折线图的上升或下降来表示统计数量的增减变化的统计图 特点:能够显示数据的变化趋势,反映事物的变化情况`直方图 由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般横轴表示数据范围,纵轴表示分布情况 特点:绘制连续性的数据,展示一组或者多组数据的分布情况`条形图 排列在工作表的列或行中的数据可以绘制到条形图中 特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别散点图 用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式 特点:判断变量之间是否存在数量关联趋势,展示离群点 Matplotlib基本要点 from matplotlib import pyplot as plt #导入pyplot x = range(2,26,2) #数据在x轴的位置,步长为2,是一个可迭代对象 y = [15,12,16,18,21,26,30,18,10,2,7,33] #数据在y轴的位置,是一个可迭代对象x轴和y轴的数据一起组成了所有要绘制出的坐标,分别为(2,15),(4,12),(6,16).... plt.plot(x,y) #传入x和y,通过plot绘制出折线图 plt.show() #展示图形

图片绘制展示 当然只有这样一个图片还不够清晰,不知道它表示的是什么,接下来让我们完善图片

1).设置图片大小 plt.figure(figsize(a,b),dpi=c) -figsize(a,b):图片的长和宽 -dpi:每英寸像素点的个数(分辨率) plt.figure(figsize(12,7),dpi=100) # 创建一个 12 * 7 点(point)的图,并设置分辨率为 100 2).保存图片 plt.savefig("file_path") -位置需要放在plot.plot()之后 plt.savefig("./t1.png") #保存图片到指定位置,保存为svg这种矢量图格式,放大后就不会又锯齿 3).设置x,y轴上的刻度及字符串 plt.xticks(x,rotation=45,fontproperties=my_font) 传一个参数:包含数字的可迭代对象,步长合适即可 传入两个参数:分别为两个可迭代对象,数字型和字符串最终会一一对应,只显示字符串 -rotation:旋转角度 -fontproperties:中文显示plt.yticks(y)

例如:`

_xtick_lables = ["10点{}分".format(i) for i in range(60)] _xtick_lables += ["11点{}分".format(i) for i in range(60)] # 取步长,数字和字符串一一对应,数据的长度一样 plt.xticks(list(x)[::3],_xtick_lables[::3],rotation = 45,fontproperties=my_font) # 若想要x轴刻度变稀疏点,可用列表取步长(x[::3])来解决,旋转度数为45°,my_font为自己设置的字体样式 4).设置中文显示 font_manager.FontProperties(fname=" ")

例如:

from matplotlib import font_manager #第一步:导入font_manager my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") #第二步:设置字体,fname="字体存放路径",win+r输入fonts可查字体路径 . . . plt.xticks(list(x)[::3],_xtick_lables[::3],rotation = 45,fontproperties=my_font) #第三步:在x轴中显示中文字体 5).添加x,y轴以及title描述信息 plt.xlabel(" ")plt.ylabel(" ")plt.title(" ")

例如:

plt.xlabel("时间",fontproperties=my_font) plt.ylabel("温度 单位(℃)",fontproperties=my_font) plt.title("10点到12点每分钟的气温变化情况",fontproperties=my_font) 6).绘制网格 plt.grid(alpha = 0.2) -alpha:透明度 7).添加图例 plt.legend()

例如:

from matplotlib import pyplot as plt . . . plt.plot(x,y_1,label = "自己") #在一个图上绘制多个图形(多次plt.plot()即可) plt.plot(x,y_2,label = "朋友") #第一步:分别添加label . . . plt.legend(prop = my_font) #第二步:添加图例,若为中文字体需要用到prop 8).绘图

plt.plot(x,y,color='r',linestyle="--",linewidth=5,alpha=0.5) #绘制折线图 -x:所有的坐标的x的值 -y:所有的坐标的y的值 -color:线条颜色 -linestyle:线条风格 -linewidth:线条粗细 -alpha:透明度

plt.scatter(x,y) #绘制散点图

plt.bar(x,y) #绘制竖条形图

plt.barh(x,y) #绘制横条形图

plt.hist(x,num_bins) #绘制直方图 -num_bins:设置的组距

实例1:用折线图绘制10点到12点每一分钟气温变化情况 from matplotlib import pyplot as plt #导入pyplot import random from matplotlib import font_manager #导入font_manager plt.figure(figsize=(10,8),dpi=100) #设置图片大小及分辨率 my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") #设置字体 x = range(0,120) y = [random.randint(20,35) for i in range(120)] #绘制折线图 plt.plot(x,y) # 调整x轴的刻度 _xtick_lables = ["10点{}分".format(i) for i in range(60)] _xtick_lables += ["11点{}分".format(i) for i in range(60)] # 想要x轴刻度稀疏一点,则可对列表取步长操作,数字和字符串一一对应,数据的长度一样,旋转度数设为45,显示中文字体(若不对x取步长操作,这里可不用list(x),直接用x即可) plt.xticks(list(x)[::3],_xtick_lables[::3],rotation = 45,fontproperties=my_font) # 添加描述信息 plt.xlabel("时间",fontproperties=my_font) plt.ylabel("温度 单位(℃)",fontproperties=my_font) plt.title("10点到12点每分钟的气温变化情况",fontproperties=my_font) #保存图片 plt.savefig("./t1.png") #展示图片 plt.show()

.图片绘制展示

实例2:绘制折线图2 from matplotlib import pyplot as plt from matplotlib import font_manager plt.figure(figsize=(10,8),dpi=100) my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") x = range(11,31) y_1 = [3,2,4,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] y_2 = [3,5,1,1,5,0,2,7,1,3,5,6,6,2,1,2,1,0,4,5] plt.plot(x,y_1,label = "小弟") plt.plot(x,y_2,label = "大哥") # 调整x轴的刻度 _xtick_lables = ["{}号".format(i) for i in range(11,31)] # 这里x轴刻度分布合适不取步长,则不用转为列表形式,数字和字符串一一对应,数据的长度一样,旋转度数设为45 plt.xticks(x,_xtick_lables,rotation = 45,fontproperties=my_font) # 添加描述信息 plt.xlabel("几号",fontproperties=my_font) plt.ylabel("零食量 单位(包)",fontproperties=my_font) plt.title("11-30号每天吃零食包数情况走势",fontproperties=my_font) # 添加图列 plt.legend(prop = my_font) # 绘制网格 plt.grid(alpha = 0.2) # 展示 plt.show()

图片绘制展示

实例3.绘制散点图 from matplotlib import pyplot as plt from matplotlib import font_manager # 设置图形大小 plt.figure(figsize=(12,7),dpi = 100) my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") x_5 = range(1,32) x_6 = range(51,82) y_5 = [21,19,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,12] y_6 = [13,14,28,19,24,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,19,7] # 绘制散点图,及图例 plt.scatter(x_5,y_5,label = "5月份") plt.scatter(x_6,y_6,label = "6月份") # 设置x轴的刻度 _x = list(x_5) + list(x_6) _xtick_labels = ["5月{}日".format(i) for i in x_5] _xtick_labels += ["6月{}日".format(i-50) for i in x_6] plt.xticks(_x[::3],_xtick_labels[::3],rotation = 45,fontproperties=my_font) # 添加图例 plt.legend(prop = my_font) # 添加描述信息 plt.xlabel("时间",fontproperties=my_font) plt.ylabel("温度",fontproperties=my_font) plt.title("标题",fontproperties=my_font) # 展示 plt.show()

图片绘制展示

实例4:绘制竖条形图 from matplotlib import pyplot as plt from matplotlib import font_manager # 设置图形大小 plt.figure(figsize=(12,7),dpi=100) # 设置字体 my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") # 添加数据 a = ["战狼2","速度与激情8","功夫瑜伽","西游降妖篇","变形金刚5:\n最后的骑士","摔跤吧!爸爸","加勒比海盗5:\n死无对证","金刚:骷髅岛","极限特工:\n终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:\n殊死一战","蜘蛛侠\n:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"] b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,3.32,6.99,6.88,6.86,6.58,2.23] # 绘制条形图 plt.bar(range(len(a)),b) # 设置x轴刻度 plt.xticks(range(len(a)),a,rotation = 90,fontproperties=my_font) # 添加描述信息 plt.xlabel("电影名字",fontproperties=my_font) plt.ylabel("票房 单位(亿)",fontproperties=my_font) plt.title("电影票房",fontproperties=my_font) # 展示 plt.show()

图片绘制展示

实例5.绘制横条形图 from matplotlib import pyplot as plt from matplotlib import font_manager # 设置图形大小 plt.figure(figsize=(12,7),dpi=100) # 设置字体 my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") # 添加数据 a = ["战狼2","速度与激情8","功夫瑜伽","西游降妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"] b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,3.32,6.99,6.88,6.86,6.58,2.23] # 绘制条形图 plt.barh(range(len(a)),b) # 设置字符串到x轴 plt.yticks(range(len(a)),a,rotation = 0,fontproperties=my_font) # 添加描述信息 plt.ylabel("电影名字",fontproperties=my_font) plt.xlabel("票房 单位(亿)",fontproperties=my_font) plt.title("电影票房",fontproperties=my_font) # 添加网格 plt.grid(alpha = 0.4) # 展示 plt.show()

图片绘制展示

实例6:绘制多个条形图 from matplotlib import pyplot as plt from matplotlib import font_manager # 设置图形大小 plt.figure(figsize=(12,7),dpi=100) # 设置字体 my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc") # 添加数据 a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"] b_14 = [15746,312,4497,319] b_15 = [12357,156,2045,168] b_16 = [2358,399,2358,362] # 设置x轴距离 bar_width = 0.2 #设置条形图宽度 x_14 = list(range(len(a))) #14号x轴的距离分布 x_15 = [i+bar_width for i in x_14] #15号紧跟在14号后面,所以在14号基础上加一个bar_width x_16 = [i+bar_width for i in x_15] #16号紧跟在15号后面,所以在15号基础上加一个bar_width # 绘制条形图 plt.bar(range(len(a)),b_14,width=bar_width,label="9月14日") plt.bar(x_15,b_15,width=bar_width,label="9月15日") plt.bar(x_16,b_16,width=bar_width,label="9月16日") # 设置字符串到x轴 plt.xticks(x_15,a,rotation = 0,fontproperties=my_font) #15号字符串刚好取中 # 添加图例 plt.legend(prop=my_font) # 添加描述信息 plt.xlabel("电影名字",fontproperties=my_font) plt.ylabel("票房 单位(亿)",fontproperties=my_font) plt.title("3天票房对比",fontproperties=my_font) # 添加网格 plt.grid(alpha = 0.4) # 展示 plt.show()

图片绘制展示

实例7:绘制直方图 from matplotlib import pyplot as plt # 设置图形大小 plt.figure(figsize=(12,7),dpi=100) interval = [0,5,10,15,20,25,30,35,40,45,60,90] width = [5,5,5,5,5,5,5,5,5,15,30,60] quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47] # 绘制直方图 plt.bar(range(12),quantity,width=1) # 设置x轴刻度 _x = [i-0.5 for i in range(13)] _xtick_labels = interval + [150] plt.xticks(_x,_xtick_labels) # 绘制网格 plt.grid() # 展示图片 plt.show()

图片绘制展示

三、Numpy 1.NumPy Ndarray 对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。 使用numpy生成数组,得到ndarry的类型

numpy.array()numpy.arange() import numpy as np import random # 使用numpy生成数组,得到ndarry的类型 t1 = np.array([1,2,3]) print(t1) print(type(t1)) print("=" * 50) t2 = np.array(range(10)) print(t2) print(type(t2)) print("=" * 50) t3 = np.arange(4,10,2) print(t3) print(type(t3)) print("=" * 50) print(t3.dtype) print("=" * 50) # numpy中的数据类型 t4 = np.array(range(1,4),dtype=float) print(t4) print(t4.dtype) print("=" * 50) t5 = np.array([1,1,0,1,0],dtype=bool) print(t5) print(t5.dtype) print("=" * 50) t6 = t5.astype("int") # 修改数据类型 print(t6) print(t6.dtype) print("=" * 50) t7 = np.array([random.random() for i in range(18)]) print(t7) print(t7.dtype) print("=" * 50) # 两位小数 t8 = np.round(t7,2) print(t8) [1 2 3] ================================================== [0 1 2 3 4 5 6 7 8 9] ================================================== [4 6 8] ================================================== int32 ================================================== [1. 2. 3.] float64 ================================================== [ True True False True False] bool ================================================== [1 1 0 1 0] int32 ================================================== [0.8798445 0.36547358 0.41240652 0.85530819 0.93375559 0.99927401 0.69021279 0.84172501 0.85125324 0.39265904 0.59847258 0.63042425 0.91126347 0.10694452 0.74943143 0.43576287 0.20210862 0.45109712] float64 ================================================== [0.88 0.37 0.41 0.86 0.93 1. 0.69 0.84 0.85 0.39 0.6 0.63 0.91 0.11 0.75 0.44 0.2 0.45] 2.NumPy 数据类型

数据类型展示

3.NumPy 广播(Broadcast)

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。 如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

import numpy as np a = np.array([1, 2, 3, 4]) b = np.array([10, 20, 30, 40]) c = a * b print(c) [ 10 40 90 160]

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。

import numpy as np a = np.array([[0, 0, 0], [10, 10, 10], [20, 20, 20], [30, 30, 30]]) b = np.array([1, 2, 3]) print(a + b) [[ 1 2 3] [11 12 13] [21 22 23] [31 32 33]]

下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。 在这里插入图片描述 4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算

4.NumPy 创建数组

ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

numpy.zeros(shape, dtype = float, order = 'C') -创建指定大小的数组,数组元素以 0 来填充numpy.ones(shape, dtype = None, order = 'C') -创建指定形状的数组,数组元素以 1 来填充 import numpy as np # 默认为浮点数 x = np.zeros(5) print(x) print("=" * 20) # 设置类型为整数 y = np.zeros((5,), dtype=np.int) print(y) print("=" * 20) # 自定义类型 z = np.zeros((2, 2), dtype=[('x', 'i4'), ('y', 'i4')]) print(z) [0. 0. 0. 0. 0.] ==================== [0 0 0 0 0] ==================== [[(0, 0) (0, 0)] [(0, 0) (0, 0)]] import numpy as np # 默认为浮点数 x = np.ones(5) print(x) print("=" * 20) # 自定义类型 x = np.ones([2, 2], dtype=int) print(x) [1. 1. 1. 1. 1.] ==================== [[1 1] [1 1]] 5.Numpy 数组操作 1)修改数组形状 numpy.reshape()numpy.ndarry.flatten() import numpy as np # 数组形状 t1 = np.array(range(12)) print(t1.shape) print("=" * 50) t2 = np.array([[1,2,3],[4,5,6]]) print(t2.shape) print("=" *50) # 修改数组形状 t3 = np.array([1,2,3,4,5,6,7,8,9,10,11,12]) print(t3.reshape(3,4)) print("=" *50) t4 = np.arange(12).reshape(3,4) print(t4) print("=" *50) print(t4.reshape(12,)) # 转为一维 print("=" *50) print(t4.reshape(12,1)) # 转为12行1列 print("=" *50) print(t4.reshape(1,12)) # 转为1行12列,注意多一个[] print("=" *50) # 多维数组展开,更改对原数组不影响 print(t4.flatten()) (12,) ================================================== (2, 3) ================================================== [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] ================================================== [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] ================================================== [ 0 1 2 3 4 5 6 7 8 9 10 11] ================================================== [[ 0] [ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 7] [ 8] [ 9] [10] [11]] ================================================== [[ 0 1 2 3 4 5 6 7 8 9 10 11]] ================================================== [ 0 1 2 3 4 5 6 7 8 9 10 11] 2)翻转数组` numpy.transpose()numpy.ndarray.T import numpy as np a = np.arange(12).reshape(3, 4) print('原数组:') print(a) print('对换数组:') print(np.transpose(a)) 原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 对换数组: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]] import numpy as np a = np.arange(12).reshape(3, 4) print('原数组:') print(a) print('转置数组:') print(a.T) 原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 转置数组: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]] 3)连接数组` numpy.hstack(a,b) -它通过水平堆叠来生成数组numpy.vstack(a,b) -它通过垂直堆叠来生成数组 import numpy as np a = np.array([[1, 2], [3, 4]]) print('第一个数组:') print(a) b = np.array([[5, 6], [7, 8]]) print('第二个数组:') print(b) print('水平堆叠:') c = np.hstack((a, b)) print(c) 第一个数组: [[1 2] [3 4]] 第二个数组: [[5 6] [7 8]] 水平堆叠: [[1 2 5 6] [3 4 7 8]] import numpy as np a = np.array([[1, 2], [3, 4]]) print('第一个数组:') print(a) b = np.array([[5, 6], [7, 8]]) print('第二个数组:') print(b) print('竖直堆叠:') c = np.vstack((a, b)) print(c) 第一个数组: [[1 2] [3 4]] 第二个数组: [[5 6] [7 8]] 竖直堆叠: [[1 2] [3 4] [5 6] [7 8]] 4)数组的行列交换 import numpy as np t = np.arange(0,12).reshape(3,4) print(t) print("="*20) # 交换2,3行 t[[1,2],:] = t[[2,1],:] print(t) print("="*20) # 交换1,3列 t[:,[0,2]] = t[:,[2,0]] print(t) print("="*20) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] ==================== [[ 0 1 2 3] [ 8 9 10 11] [ 4 5 6 7]] ==================== [[ 2 1 0 3] [10 9 8 11] [ 6 5 4 7]] ==================== 6.NumPy 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。 ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

import numpy as np a = np.arange(10) print(a) print("=" * 20) s = slice(2, 7, 2) # 从索引 2 开始到索引 7 停止,间隔为2 print(a[s]) [0 1 2 3 4 5 6 7 8 9] ==================== [2 4 6]

以上实例中,我们首先通过 arange() 函数创建 ndarray 对象。 然后,分别设置起始,终止和步长的参数为 2,7 和 2。 我们也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作:

import numpy as np a = np.arange(10) b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2 print(b) [2 4 6]

冒号 : 的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

import numpy as np t2 = np.arange(1,37).reshape(6,6) print(t2) print("=" * 25) # 取行,取第3行 print(t2[2]) print("=" * 25) # 取多行,取第3行及以后的数据 print(t2[2:]) print("=" * 25) # 取不连续多行,取第2,3,5,行数据 print(t2[[1,2,4]]) print("=" * 25) # 取列,取第2列 print(t2[:,1]) print("=" * 25) # 取连续多列,取第3列及以后数据 print(t2[:,2:]) print("=" * 25) # 取不连续多列,取第1,3列 print(t2[:,[0,2]]) print("=" * 25) # 取行列,取2行3列的数据 print(t2[2,3]) print("=" * 25) # 取多行多列,取3-5行2-4列 print(t2[2:5,1:4]) print("=" * 25) # 取多个不相邻的点,两个列表对应的值分别作为行和列(0,0)(2,1)(2,3) print(t2[[0,2,2],[0,1,3]]) print("=" * 25) # 修改值,np.where(三元运算符)把t2中小于10的替换成0,大于等于10的替换成10 print(np.where(t2 5]) [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 大于 5 的元素是: [ 6 7 8 9 10 11] 7.NumPy 统计函数

NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。

numpy.amin() 和 numpy.amax() -numpy.amin() 用于计算数组中的元素沿指定轴的最小值。 numpy.amax() 用于计算数组中的元素沿指定轴的最大值。numpy.ptp() -numpy.ptp()函数计算数组中元素最大值与最小值的差(最大值 - 最小值)numpy.median() -numpy.median() 函数用于计算数组 a 中元素的中位数(中值)numpy.mean() -numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算numpy.average() -numpy.average() 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。 该函数可以接受一个轴参数。 如果没有指定轴,则数组会被展开 8.Numpy读取数据 np.loadtxt(frame,dtype=np.float,delimiter=None) -frame:文件、字符串或产生器,可以是.gz或.bz2压缩文件 -dtype:数据类型,可选,CSV的字符串以什么数据类型读入数组中,默认np.float -delimiter:分隔字符串,默认是任何空格,改为逗号 import numpy as np # 数据路径 us_data = r"D:\pycharm\pycharm_project\matplotlib,numpy\US_video_data_numbers.csv" # 添加数据,设置按逗号进行数据分隔,如果数据元素值比较大,这里dtype不设置为int,则会以科学计数法展示 us_data = np.loadtxt(us_data,delimiter=",",dtype="int") print(us_data) [[4394029 320053 5931 46245] [7860119 185853 26679 0] [5845909 576597 39774 170708] ... [ 142463 4231 148 279] [2162240 41032 1384 4737] [ 515000 34727 195 4722]] 练习:读取以下两组数据,拼接起来,用0表示us_data,1表示uk_data # us_data [[4394029 320053 5931 46245] [7860119 185853 26679 0] [5845909 576597 39774 170708] ... [ 142463 4231 148 279] [2162240 41032 1384 4737] [ 515000 34727 195 4722]] # uk_data [[7426393 78240 13548 705] [ 494203 2651 1309 0] [ 142819 13119 151 1141] ... [ 109222 4840 35 212] [ 626223 22962 532 1559] [ 99228 1699 23 135]] import numpy as np # 数据路径 us_data = r"D:\pycharm\pycharm_project\matplotlib,numpy\US_video_data_numbers.csv" uk_data = r"D:\pycharm\pycharm_project\matplotlib,numpy\GB_video_data_numbers.csv" # 添加数据,设置按逗号进行数据分隔,如果数据元素值比较大,这里dtype不设置为int,则会以科学计数法展示 us_data = np.loadtxt(us_data,delimiter=",",dtype="int") uk_data = np.loadtxt(uk_data,delimiter=",",dtype="int") # 添加两组数据,构造全为0,1的数组,0表示us,1表示uk. # (us_data.shape[0],1)表示数组形状取us_data所有行1列的形状 zeros_data = np.zeros((us_data.shape[0],1)).astype(int) ones_data = np.ones((uk_data.shape[0],1)).astype(int) # 分别添加一列全为0,1的数组 us_data = np.hstack((us_data,zeros_data)) uk_data = np.hstack((uk_data,ones_data)) # 拼接两组数据 final_data = np.vstack((us_data,uk_data)) print(final_data) [[4394029 320053 5931 46245 0] [7860119 185853 26679 0 0] [5845909 576597 39774 170708 0] ... [ 109222 4840 35 212 1] [ 626223 22962 532 1559 1] [ 99228 1699 23 135 1]]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3