yshda

导航

 

(一)、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列及剩下的所有元素

输出结果为:

输出结果:
提供的数组:
[-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 子库提供了一批操作和绘图函数,每个函数代表对图像进行的一个操作,比如创建绘图区域、添加标注或者修改坐标轴等。这些函数采用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 轴 ") 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()

 

 

posted on 2020-05-05 16:03  yshda  阅读(321)  评论(0)    收藏  举报