(一)、Numpy库(用于处理含有同种元素的多维数组运算的第三方库)
概述:Python 标准库中提供了一个array 类型,用于保存数组类型数据,然而这个类型不支持多维数据,处理函数也不够丰富,不适合用于做数值运算。numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”。
数组中所有元素的类型必须相同,数组中元素可以用整数索引,序号从0开始。ndarray 类型的维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。一维数组的秩为1,二维数组的秩为2,二维数组相当于由两个一维数组构成。
由于numpy 库中函数较多且命名容易与常用命名混淆,建议采用如下方式引用numpy 库:
>>>import numpy as np(在程序的后续部分中,np 代替numpy)
一、数组的创建
| 函数 | 描述 |
| np.array([x,y,z],dtype=int) | 从Python列表和元组创造数组 |
| np.arange(x,y,i) | 创建一个由x到y,以i为步长的数组 |
| np.linspace(x,y,n) | 创建一个由x到y,等分成n个元素的数组 |
| np.indices((m,n)) | 创建一个m行n列的随机数组 |
| np.random.rand(m,n) | 创建一个m行n列的随机数组 |
| np.ones((m,n),dtype) | 创建一个m行n列全1的数组,dtype是数据类型 |
| np.empty((m,n),dtype) | 创建一个m行n列全0的数组,dtype是数据类型 |
实例 import numpy as np # 默认为浮点数 x = np.zeros(4) print(x) # 设置类型为整数 y = np.zeros((4), dtype = np.int) print(y) # 自定义类型 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)]]
二、数组的属性
| 函数 | 描述 |
| ndarray.ndim | 秩,即轴的数量或维度的数量 |
| ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
| ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
| ndarray.dtype | ndarray 对象的元素类型 |
| ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
| ndarray.flags | ndarray 对象的内存信息 |
| ndarray.real | ndarray元素的实部 |
| ndarray.imag | ndarray 元素的虚部 |
| ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性 |
实例:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print (a.shape)
结果:(2, 3)
三、数组操作
| 函数 | 描述 |
| np.reshape | 不改变数据的条件下修改形状 |
| np.flat | 数组元素迭代器 |
| np.flatten | 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 |
| np.ravel | 返回展开数组 |
import numpy as np a = np.arange(8) print ('原始数组:') print (a) print ('\n') b = a.reshape(4,2) print ('修改后的数组:') print (b)
输出结果:
原始数组:
[0 1 2 3 4 5 6 7]
修改后的数组:
[[0 1]
[2 3]
[4 5]
[6 7]]
四、切片与索引
| 函数 | 描述 |
| a[i] | 索引第i个元素 |
| a[-i] | 从后向前索引第i个元素 |
| a[n:m] | 默认步长为1,从前往后索引,不包含m |
| a[-m:-n] | 默认步长为1,从后往前索引,结束位置为n |
| a[n,m,i] | 指定i步长的由n到m的索引 |
切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
实例:
import numpy as np a = np.arange(10) s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2 print (a[s])
输出结果为:
[2 4
实例
import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print (a[...,1]) # 第2列元素 print (a[1,...]) # 第2行元素 print (a[...,1:]) # 第2列及剩下的所有元素
输出结果为:
[2 4 5] [3 4 5] [[2 3] [4 5] [5 6]]
五、算术运算
| 函数 | 描述 |
| np.add[x1,x2] | y = x1+x2 |
| np.subtract(x1,x2) | y = x1-x2 |
| np.multiply(x1,x2) | y = x1*x2 |
| np.divide(x1,x2) | y = x1/x2 |
| np.floor_divide(x1,x2) | y = x1//x2,返回值取整 |
| np.negative(x) | y = -x |
| np.reciprocal(x) | y = 1/x |
| np.power(x1,x2) | y = x1**x2 |
| np.remainder(x1,x2)/np.mod(x1,x2) | y = x1%x2 |
实例
import numpy as np
a = np.array([10,100,1000])
print ('我们的数组是;')
print (a)
print ('\n')
print ('调用 power 函数:')
print (np.power(a,2))
print ('\n')
print ('第二个数组:')
b = np.array([1,2,3])
print (b)
print ('\n')
print ('再次调用 power 函数:')
print (np.power(a,b))
六、比较运算
| 函数 | 描述 |
| np.equal(x1,x2) | y = x1==x2 |
| np.not_equal(x1,x2) | y = x1!=x2 |
| np.less(x1,x2) | y = x1<x2 |
| np.less_equal(x1,x2) | y = x1<=x2 |
| np.greater(x1,x2) | y = x1>x2 |
| np.greater_equal(x1,x2) | y = x1>=x2 |
| np.where(conditionp[x,y]) | 根据给出的条件判断输出x还是y |
实例 import numpy as np np.less([1,2],[2,2])
输出结果为: array([ True, False])
七、数学运算函数
np.pi:是一个常量,代表3.1415926...
Numpy提供了标准的三角函数:sin()、cos()、tan(),
arcsin,arccos,和 arctan 函数返回给定角度的 sin,cos 和 tan 的反三角函数,
这些函数的结果可以通过 numpy.degrees() 函数将弧度转换为角度。
实例
import numpy as np
a = np.array([0,30,45,60,90])
print ('含有正弦值的数组:')
sin = np.sin(a*np.pi/180)
print (sin)
print ('\n')
print ('计算角度的反正弦,返回值以弧度为单位:')
inv = np.arcsin(sin)
print (inv)
print ('\n')
print ('通过转化为角度制来检查结果:')
print (np.degrees(inv))
输出结果:
含有正弦值的数组: [0. 0.5 0.70710678 0.8660254 1. ] 计算角度的反正弦,返回值以弧度为单位: [0. 0.52359878 0.78539816 1.04719755 1.57079633] 通过转化为角度制来检查结果: [ 0. 30. 45. 60. 90.]
八、其他运算函数
| 函数 | 描述 |
| np.abs(x) | 计算基于元素的整形,浮点或复数的绝对值 |
| np.sqrt(x) | 计算每个元素的平方根 |
| np.squre(x) | 计算每个元素的平方 |
| np.sign(x) | 计算每个元素的符号 |
| np.ceil(x) | 计算大于或等于每个元素的最小值 |
| np.floor(x) | 计算小于或等于每个元素的最大值 |
| np.rint(x[,out]) | 圆整,取每个元素为最近的整数,保留数据类型 |
| np.exp(x[,out]) | 计算每个元素指数值 |
| np.log(x),np.log10(x),np.log2(x) | 计算自然对数(e),基于10,2的对数,log(1+x) |
实例
import numpy as np
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print ('提供的数组:')
print (a)
print ('修改后的数组:')
print (np.floor(a))
print ('\n')
print ('提供的数组:')
print (a)
print ('修改后的数组:')
print (np.ceil(a))
输出结果: 提供的数组: [-1.7 1.5 -0.2 0.6 10. ] 修改后的数组: [-2. 1. -1. 0. 10.] 提供的数组: [-1.7 1.5 -0.2 0.6 10. ] 修改后的数组: [-1. 2. -0. 1. 10.]
(二)
Matplotlib库(提供数据绘图功能的第三方库,其pyplot 子库主要用于实现各种数据展示图形的绘制)
Matplotlib 默认情况不支持中文,为了正确显示中文字体,请用以下代码更改默认设置,其中'SimHei'表示黑体字。
import matplotlib matplotlib.rcParams['font.family']='SimHei' matplotlib.rcParams['font.sans-serif']=['SimHei']#更新字体格式

matplotlib.pyplot 是matplotlib 的子库,提供一批预定义的绘图函数
| 函数 | 描述 |
| plt.figure(figsize=None,facecolor=None) | 创建一个全局绘图区域 |
| plt.axes(rect,axisbg='w') |
创建一个坐标系风格的自绘图区域 (axes()默认创建一个subplot(111)坐标系,参数rec = [left,bottom,width,height]中四个变量的范围都为[0,1],表示坐标系与全局绘图区域的关系;axisbg 指背景色,默认为white。) |
| plt.subplot(nrows,ncols,plot_number) |
在全局绘图区域中创建一个自绘图区域 (其参数表示将全局绘图区域分成nrows 行和ncols 列) |
| plt.subplots_adjust() |
调整子图区域的布局
|
实例:
import matplotlib.pyplot as plt plt.subplot(324) plt.show()
结果:

二、plt 库的读取和显示函数
三、plt 库的标签设置函数


实例
import matplotlib.pyplot as plt plt.xlabel("x 轴 ") plt.ylabel("y 轴 ")
plt.title("Matplotlib demo") plt.show()
结果如图:

四、plt 库的基础图表函数



实例
import numpy as np import matplotlib.pyplot as plt
x = np.arange(1,11) y = 2 * x + 5 plt.title("Matplotlib demo") plt.xlabel("x axis ") plt.ylabel("y axis ") plt.plot(x,y) plt.show()
结果如图:

实例
import numpy as np
import matplotlib.pyplot as plt # 计算正弦曲线上点的 x 和 y 坐标
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
plt.title("sine wave form") # 使用 matplotlib 来绘制点
plt.plot(x, y)
plt.show()
结果如图:

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif']=['SimHei']
plt.plot([1,2,4],[1,2,3])
plt.title("坐标系标题")
plt.xlabel("时间(s) ")
plt.ylabel("范围(m) ")
plt.show()
结果如图:

五、plt 库的坐标轴设置函数

六、plt 库的区域填充函数
plt 库提供了3 个区域填充函数,对绘图区域填充颜色



(将python123作业的成绩做成雷达图,写上学号)
#DrawDota.py import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family']='SimHei' matplotlib.rcParams['font.sans-serif']=['SimHei'] labels = np.array(['第一','第二','第三','第四','第五','第六','第七','第八','第九']) nAttr = 9 data = np.array([18,10,18,14,18,24,36,40,38])#数据值 angles = np.linspace(0,2*np.pi,nAttr,endpoint=False) data = np.concatenate((data,[data[0]]))#连接data和data[0] angles = np.concatenate((angles,[angles[0]]))#连接angles和angles[0] fig = plt.figure(facecolor="white")#创建一个全局绘图区域 plt.subplot(111,polar=True) plt.title('Python123成绩表(单位:单元)') plt.plot(angles,data,'bo-',color='b',linewidth=2) plt.fill(angles,data,facecolor='r',alpha=0.8) plt.thetagrids(angles*180/np.pi,labels)#在各个angles的位置上标记上对应的labels plt.figtext(0.72,0.95,'学号:2019310143046')#为全局绘图区添加文字 plt.grid(True) plt.show()


浙公网安备 33010602011771号