python的学习笔记11

2022-09-12  本文已影响0人  三块给你买麻糬_31c3

16、副本与视图

16.1简单赋值

它不会创建数组对象的副本,同时可以通过id()函数去访问,将一个数组的变化都反应在另一个数组上。如:

16.2视图或浅拷贝

ndarray.view() 方会创建一个新的数组对象,该方法创建的新数组的维数变化不会改变原始数据的维数。

但是使用切片创建视图,在对视图进行修改时会影响到原始数组

此时变量a、b都是arr的一部分视图,对视图的修改会直接反映到原数据中。但a,b 的id,是不同的,以此视图虽然指向原数据,但和赋值引用还是有区别的。

16.3副本或深拷贝

ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。

16.4小结

对于赋值来说,它实际上是对象的引用,在进行赋值时,并没有拷贝这个对象,只是拷贝这个对象的引用,所以赋值的对象进行修改之后,原始数组也会改变。

视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。

副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置。副本一般发生在:Python 序列的切片操作,调用deepCopy()函数。调用 ndarray 的 copy() 函数产生一个副本。

17、numpy IO

17.1小简介

NumPy IO 操作是以文件的形式从磁盘中加载 ndarray 对象。在这个过程中,NumPy 可以两种文件类型处理 ndarray 对象,一类是二进制文件(以.npy结尾),另一类是普通文本文件。

上述两种文件格式,分别对应着不同的 IO 方法,如下所示:

文件类型 处理方法

二进制文件 load() 和 save()

普通文本文件 loadtxt() 和 savetxt()

NumPy 给 ndarray 对象引入了一种.npy文件格式,通过它来件实现对 ndarray 对象的保存。npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息

17.2 numpy.save()

numpy.save(file, arr, allow_pickle=True, fix_imports=True)

参数 说明

file 要保存的文件,扩展名为 .npy,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上。

arr 要保存的数组

allow_pickle 可选,布尔值,允许使用 Python pickles 保存对象数组,Python 中的 pickle 用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列化和反序列化。

fix_imports 可选,为了方便 Pyhton2 中读取 Python3 保存的数据。

输出结果为[1,2,3,4,5]

17.3 ny.savez()

numpy.savez() 函数将多个数组保存到以 npz 为扩展名的文件中。函数为:numpy.savez(file, *args, **kwds)

参数 说明

file 要保存的文件扩展名为.npz,如果文件路径末尾没有扩展名.npz该扩展名会被自动加上。

args 要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为 arr_0, arr_1,

kwds 要保存的数组使用关键字名称。

输出结果:

17.4 savetxt()

savetxt() 函数是以简单的文本文件格式存储数据,对应的使用 loadtxt() 函数来获取数据。

np.loadtxt(FILENAME, dtype=int, delimiter=' ')

np.savetxt(FILENAME, a, fmt="%d", delimiter=",")

参数 delimiter 可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。

18、numpy Matplotlib

18.1简介

Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

plt.plot()函数用于绘图,plt.plot(x, y, format_string, **kwargs)

参数 说明

x X轴数据,列表或数组,可选

y Y轴数据,列表或数组

format_string 控制曲线的格式字符串,可选

**kwargs 第二组或更多(x,y,format_string),可画多条曲线

format_string 由颜色字符、风格字符、标记字符组成,相应的字符都能搜到,这里就不记了

此外还有:

color : 控制颜色, 如color=‘green’;linestyle : 线条风格, 如linestyle=‘dashed’

marker : 标记风格, 如marker=‘o’(实心圈标记);markersize: 标记尺寸, 如markersize=20

markerfacecolor: 标记颜色, 如markerfacecolor=‘blue’;

18.2绘制简单图像

18.2.1绘制线性函数图像

将x,y的数据传给plt.plot,然后绘制图形,最后通过plt.show()显示图像。

如果想要以圆点的样式,来代替图 1 中的线条样式,那么可以使用“ ob”作为 plot() 的格式化字符

18.2.2绘制正余弦图像

18.2.3将两个图像绘制在一个表中

此外还可以直接在一个plt.plot()中把两个图像都写进去

18.3 绘制图表

18.3.1绘制柱状图

bar():pyplot 子模块中提供了 bar() 函数来生成柱状图

18.3.2直方图

Matplotlib 可以将直方图的数字表示转换为图形。 pyplot 子模块的 plt() 函数将包含数据和 bin 数组的数组作为参数,并转换为直方图。

18.3.3散点图

plt.scatter()函数,用于生成一个散点图,函数的语句中包含以下参数,其中x,y是必须的,其他是可选的

18.3.4饼图

(1)

(2)给饼图加标签

labels=languages为每个扇形打上标签;

autopct='%1.1f%%'为每个扇形标上占比;

通过设置参数counterclock为 False,使得方向改为顺时针方向;

通过设置参数startangle为 90,将最大扇形放在 12 点钟方向;

这里有个问题就是饼图的标题出现乱码,一个解决方法就是增加语句plt.rcParams['font.sans-serif']=['Simhei']

18.4图例

plt.legend()函数

图例函数,包含以下的一些参数:

(1)设置图例的位置:plt.legend(loc=' ');

(2)设置图例字体大小fontsize : int or float or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’;

(3)设置图例的边框及背景:

plt.legend(loc='best',frameon=False) #去掉图例边框

plt.legend(loc='best',edgecolor='blue') #设置图例边框颜色

plt.legend(loc='best',facecolor='blue') #设置图例背景颜色,若无边框,参数无效

(4)设置图例的标题

legend = plt.legend(["BJ", "SH"], title='Beijing VS Shanghai')  #中括号里的是各个图像的名称

plt.plot(["BJ", "SH"],loc='upper left',title='Beijing VS Shanghai')

运行结果为:

18.5 subplot()函数

在图一个图中绘制不同的图线

上一篇下一篇

猜你喜欢

热点阅读