Numpy和Matplotlib读书笔记

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(5) print(x) # 设置类型为整数 y = np.zeros((5,), 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) (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  6]

切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。

实例
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))

输出结果为:
我们的数组是;
[  10  100 1000]
调用 power 函数:
[    100   10000 1000000
第二个数组:
[1 2 3]
再次调用 power 函数:
[        10      10000 1000000000]

 六、比较运算

函数 描述
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 的子库,提供一批预定义的绘图函数,引用方式如下:
>>>import matplotlib.pyplot as plt
上述语句与import matplotlib.pyplot 一致,as 保留字与import 一起使用能够改变后续代码中库的命名空间,有助于提高代码可读性。简单说,在后续程序中,plt 将代替matplotlib.pyplot。
plt 子库提供了一批操作和绘图函数,每个函数代表对图像进行的一个操作,比如创建绘图区域、添加标注或者修改坐标轴等。这些函数采用plt.<b>()形式调用,其中<b>是具体函数名称。
一、plt 库的绘图区域函数
 
函数  描述
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 axis ") plt.ylabel("y axis ")
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([30,14,16,28,36,38,40,40,40])#数据值
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,'学号:2019310143112')#为全局绘图区添加文字
plt.grid(True)
plt.show()
                

结果如图:

 
posted @ 2020-04-29 21:01  Ni__23  阅读(233)  评论(0)    收藏  举报