题目①线性代数操作

一、源程序调试过程 1、导入库

import numpy as np 2、生成数组 a = np.array([[1.,2.],[3.,4.]]) y = np.array([[5.],[7.]])

3、数组a的转置

a_T = a.T

4、创建形状为(2,2)的对角矩阵b

对角矩阵是一种特殊的方阵,其除了对角线上的元素为非零数外,其他元素均为零。

np.diag() 是 NumPy 中用于生成对角矩阵的函数:numpy.diag(v, k=0)

其中,v 是一个数组或列表,表示对角线上的元素;k 是一个整数,表示对角线的偏移量。 (1)生成一维数组的对角矩阵

v 是一个一维数组,则 np.diag()会返回一个以 v 中的元素为对角线上的元素,其他位置为零的对角矩阵。 v = np.array([1, 2, 3]) b1 = np.diag(v)

(2)生成二维数组的对角矩阵

v 是一个二维数组,则 np.diag() 会返回一个二维数组的对角矩阵,即以 v 中的每个一维数组的元素为对角线上的元素,其他位置为零的对角矩阵。 v = np.array([[1, 2], [3, 4]]) b2 = np.diag(v)

(3)生成偏移量不为零的对角矩阵

k 的值不为零,则对角线上的元素将会出现在矩阵的第 k 条对角线上。 如果 k 大于零,则对角线在矩阵的主对角线的上方; 如果 k 小于零,则对角线在矩阵的主对角线的下方。 v = [1, 2, 3] b3 = np.diag(v, k=1) b4 = np.diag(v, k=-1)

(4)输出形状为(2,2)的对角矩阵b

v = np.array([1.,2.]) b5 = np.diag(v)

5、对角矩阵的迹

对角矩阵的迹(trace)是指对角线上的元素之和。

对角矩阵的迹在数学和工程领域都有广泛的应用,例如用于计算特征值、判断矩阵是否正定等等。

可以使用 np.trace() 函数来计算一个矩阵的迹。如果传入的是一个二维数组,则 np.trace() 会返回该数组的迹;如果传入的是一个一维数组,则会返回该数组转化为二维数组后的迹。

计算对角矩阵b的迹:

tr = np.trace(b)

6、求解数组a和数组y的解

a = np.array([[1.,2.],[3.,4.]]) y = np.array([[5.],[7.]])

给定线性方程组 a x = y,我们可以使用 NumPy 中的 np.linalg.solve() 函数来求解其解 x

x = np.linalg.solve(a, y)

二、实验实习结果分析 1、输出创建的数组a

[[1. 2.] [3. 4.]] 2、输出a的转置a_T

[[1. 3.] [2. 4.]]

3、b1: [[1 0 0] [0 2 0] [0 0 3]]

4、b2: [1 4]

5、b3: [[0 1 0 0] [0 0 2 0] [0 0 0 3] [0 0 0 0]]

6、b4: [[0 0 0 0] [1 0 0 0] [0 2 0 0] [0 0 3 0]]

7、b: [[1. 0.] [0. 1.]]

8、b_trace: 2.0

9、x: [[-3.] [ 4.]]

三、心得体会 1、学会了使用numpy库生成数组array

2、学会了矩阵的转置array.T

3、生成对角矩阵的函数:numpy.diag(v, k=0)

4、对角矩阵的迹trace

5、求解线性方程组ax=y

x = np.linalg.solve(a, y)

题目②matplotlib库绘制图表

一、源程序调试过程 1、导入库

import numpy as np import matplotlib.pyplot as plt

2、散点图

参数:

s:点的大小,可以是标量或数组,默认值为20。 c:点的颜色,可以是单个颜色值或颜色序列,默认值为蓝色(‘b’)。 alpha:点的透明度,取值范围为0到1,默认值为1(不透明)。 marker:点的形状,可以是标记字符串或路径,例如“o”表示圆点,“s”表示正方形等,默认为圆点。 edgecolors:点的边框颜色,可以是单个颜色值或颜色序列,默认为点的颜色。 linewidths:点的边框宽度,可以是标量或数组,默认为1。 cmap:颜色映射,可以是名称或colormap对象,用于为点设置颜色。

散点图1:

(1)生成数据

x = np.random.randn(100) y = np.random.randn(100) 解释:

np.random.randn(d0, d1, …, dn)

np.random.randn() 函数是 Numpy 中的一个随机数生成函数,用于生成服从标准正态分布的随机数。

d0、d1、……、dn 是整数,表示生成的随机数的形状。如果没有指定形状,则默认生成一个随机数。

该函数的返回值是一个 Numpy 数组,其形状由输入的参数决定,数组中的每个元素都是从均值为 0,方差为 1 的标准正态分布中随机抽取得到的随机数。

np.random.randn(100) 用于生成一个包含 100 个随机数的 Numpy 数组。

例如:

x = np.random.randn(2, 3)生成一个形状为 (2, 3) 的数组 x,其中包含 6 个随机数

(2)绘制散点图

plt.scatter(x, y)

(3)添加标题和坐标轴标签

plt.title(“Scatter Plot”) plt.xlabel(“X”) plt.ylabel(“Y”)

(4)显示图像 plt.show()

散点图2:设置点的大小和颜色

plt.scatter(x, y, s=50, c=‘r’)

散点图3:设置点的大小和透明度

plt.scatter(x, y, s=50, alpha=0.5)

散点图4:设置点的形状和颜色映射

plt.scatter(x, y, marker=‘s’, cmap=‘Blues’)

报错:

UserWarning: No data for colormapping provided via ‘c’. Parameters ‘cmap’ will be ignored

查询资料:使用了 cmap 参数,但是没有为每个数据点指定相应的颜色数据。

c = np.random.randn(100) # 随机生成一个颜色数组

plt.scatter(x, y, marker=‘s’, cmap=‘Blues’, c=c)

3、折线图

参数:

linewidth:线条宽度 linestyle:线条样式,如实线 ‘-’、虚线 ‘–’、点线 ‘:’ 等 color:线条颜色 marker:数据点的标记样式,如圆圈 ‘o’、方形 ‘s’、三角形 ‘^’ 等 markersize:数据点的标记大小 markerfacecolor:数据点的填充颜色 markeredgecolor:数据点的边框颜色 label:线条的标签,用于添加图例 alpha:线条的透明度

折线图1:

(1)生成数据

x = np.linspace(0, 10, 100) y = np.sin(x)

解释:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

start 表示起始值

stop 表示终止值

num 表示要生成的等间隔数字的个数(默认为 50)

endpoint 表示是否包含终止值(默认为 True)

retstep 表示是否返回间隔值(默认为 False)

dtype 表示输出数组的数据类型(默认为 None)

axis 表示生成的数组的维度(默认为 0)

np.sin 函数是 Numpy 中的三角函数之一,用于计算一个数组中每个元素的正弦值。

(2)绘制折线图

plt.plot(x, y)

(3)添加标题和坐标轴标签

plt.title(“Line Plot”) plt.xlabel(“X”) plt.ylabel(“Y”)

(4)显示图像 plt.show()

折线图2:

plt.plot(x, y, linewidth=2, linestyle=‘–’, color=‘red’, marker=‘o’, markersize=5, markerfacecolor=‘white’, markeredgecolor=‘black’, label=‘sin(x)’, alpha=0.8)

设置了线条的宽度、样式、颜色和透明度,以及数据点的标记样式、大小、填充颜色和边框颜色

4、直方图

直方图是一种常见的数据可视化方式,它用来表示一组数值数据的频率分布情况。直方图将数值范围划分成若干个“区间”,然后统计数据中落在每个区间内的观测值的个数或频率,并将它们用柱状图展示出来。每个柱子的高度表示该区间内的观测值数量或频率,柱子的宽度表示区间的大小。

通过观察直方图可以得出以下信息:

数据的中心趋势:观察柱子的位置和数量,可以大致判断数据的中心趋势:数据的平均值、中位数等。 数据的离散程度:观察柱子的宽度和高度,可以判断数据的离散程度:数据的标准差、极差等。 数据的分布形态:观察柱子的形状和分布情况,可以判断数据的分布形态:是否呈现正态分布、偏态分布等。

直方图也经常用来评估数据的正态性、对称性、峰度和偏度等统计特性,并作为其他模型和算法的输入。

参数:

bins:指定数据分成的区间数目也就是直方图的柱数,默认为10。 range:指定数据分布范围,比如range=[0,10]表示只显示0到10之间的数据分布情况,默认为数据的取值范围。 density:指定是否对数据进行归一化(标准化)处理,默认为False,即不进行归一化处理。 histtype:指定绘制的直方图类型,包括bar(默认)、barstacked堆叠的直方图、step线形直方图、stepfilled填充线形直方图。 color:指定直方图的颜色,可以输入单个颜色,也可以输入一个颜色列表,用于多组数据的区分。 alpha:指定直方图的透明度。 orientation:指定绘制直方图的方向,包括水平(‘horizontal’)和垂直(‘vertical’)。

直方图1:

(1)生成随机数据 data = np.random.randn(1000)

(2)画出直方图 plt.hist(data, bins=20)

(3)添加标题和坐标轴标签 plt.title(“Histogram”) plt.xlabel(“Value”) plt.ylabel(“Frequency”)

(4)显示图像 plt.show()

直方图2:

plt.hist(data, bins=20, range=[-3, 3], density=True, histtype=‘stepfilled’, color=‘steelblue’, alpha=0.5, orientation=‘vertical’)

直方图3:

n, bins, patches = plt.hist(data, bins=20, range=[-3, 3], density=True, histtype=‘bar’, alpha=0.5, color=[‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘purple’, ‘black’, ‘brown’, ‘cyan’, ‘pink’])

函数的返回值n为每个柱子的数值,bins为每个柱子的边界值,patches为每个柱子的图像对象。

报错:ValueError: The ‘color’ keyword argument must have one color per dataset, but 1 datasets and 10 colors were provided

原因:我只有一个数据集,上面的代码是生成多个数据集的直方图

查询资料:想让一个数据集绘制成的直方图柱子分别有不同的颜色可以使用循环来实现,每次循环在指定的颜色列表中选择一个颜色来作为当前直方图柱子的颜色。

colors = [‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘purple’, ‘black’, ‘brown’, ‘cyan’, ‘pink’] n, bins, patches = plt.hist(data, bins=20, range=[-3, 3], density=True, histtype=‘bar’, alpha=0.5)

for i, patch in enumerate(patches): patch.set_facecolor(colors[i % len(colors)])

n, bins, patches是Matplotlib的hist函数返回的三个值。

n是一个1维的numpy数组,记录了每个区间(bin)中数据点的个数。

bins是一个1维的numpy数组,记录了所有的区间(bin)的边缘值。

patches是一个matplotlib的Patch对象的列表,它代表了直方图中每个区间(bin)的图形对象,可以用于更改这些对象的可视化属性,如颜色、透明度等。

在绘制好柱状图之后,使用循环填充每个柱子的颜色,i 是当前柱子的索引,patch 是对应柱子的对象。set_facecolor 是设置柱子颜色的方法,enumerate 函数将每个柱子的索引和对应的柱子对象一一匹配。

enumerate函数是Python内置函数之一,它可以将一个可迭代对象(如列表、元组、字符串等)组合为一个索引序列,同时列出数据下标和数据

使用i % len(colors)来循环使用颜色列表中的颜色,保证即使柱子个数多于颜色个数,也能正确地对柱子进行着色。

5、饼状图

参数:

labels:设置每个扇形的标签,可传入一个字符串列表。 explode:设置每个扇形与饼状图圆心的距离,可传入一个浮点数列表,其中0表示不偏移,1表示完全偏移。 colors:设置每个扇形的颜色,可传入一个颜色列表。 autopct:设置每个扇形所占比例的显示格式,可传入一个字符串,例如 “%.2f%%” 表示保留两位小数。 startangle:设置饼状图的起始角度,可传入一个浮点数,以度数表示。 shadow:设置是否显示阴影,可传入一个布尔值。

饼状图1:

(1)定义数据和标签 sizes = [30, 20, 15, 10, 5] labels = [“A”, “B”, “C”, “D”, “E”]

(2)画出饼状图 plt.pie(sizes, labels=labels)

(3)添加标题 plt.title(“Pie Chart”)

(4)显示图像 plt.show()

饼状图2:

explode = (0, 0.1, 0, 0,0) colors = [‘red’, ‘orange’, ‘yellow’, ‘green’,‘blue’] autopct = ‘%1.1f%%’

plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct=autopct, shadow=True, startangle=90)

plt.axis(‘equal’) # 保证饼状图是一个正圆形

二、实验实习结果分析 (要求测试用例尽量全面,覆盖程序运行时的每个分支) 1、散点图1

散点图2

散点图3

散点图4

2、折线图1

折线图2:

3、直方图1

直方图2:

直方图3:

4、饼状图1

饼状图2:

三、心得体会 通过本次实验,我学会了如何使用matplotlib绘制散点图、折线图、直方图和饼状图在基础的图形绘制代码外,我深入学习了散点图、折线图、直方图和饼状图的参数,通过调节参数的实验,在基础的图形之上进一步绘制了细节更丰富的图形。

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: