项目二
【项目二描述】
1、项目功能基本要求
(1)掌握 NumPy 数组对象 ndarray;
NumPy(Numerical Python)是一个用于科学计算的Python库,它提供了一个强大的多维数组对象ndarray(N-dimensional array)。ndarray是NumPy中最重要的数据结构,它是一个具有固定大小的数组,用于存储同类型的元素。
下面是一些关于ndarray的基本概念和常用操作:
创建ndarray对象:
arr = np.array([1, 2, 3, 4, 5])
查看数组的形状:
print(arr.shape)
查看数组的维度:
print(arr.ndim)
访问数组元素:
print(arr[0]) # 访问第一个元素
print(arr[2:4]) # 访问索引2到索引3的元素
修改数组元素:
arr[0] = 10 # 将第一个元素修改为10
数组运算:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b # 数组相加
d = a * b # 数组相乘
常用的数组操作:
数组形状变换:arr.reshape(new_shape)
数组转置:arr.T
数组合并:np.concatenate((arr1, arr2), axis=0)
数组拆分:np.split(arr, indices_or_sections, axis=0)
数组统计操作:
求和:arr.sum()
最大值:arr.max()
最小值:arr.min()
平均值:arr.mean()
方差:arr.var()
标准差:arr.std()
累积和:arr.cumsum()
生成特殊类型的数组:
全零数组:np.zeros(shape)
全一数组:np.ones(shape)
随机数组:np.random.random(shape)
这些是NumPy中ndarray的基本概念和常用操作。ndarray提供了高效的数据存储和处理功能,可以进行各种数值计算和科学计算任务。
(2)掌握 NumPy 矩阵与通用函数;
在NumPy中,除了多维数组(ndarray),还有矩阵(matrix)的数据结构可用于进行线性代数运算。矩阵是二维的特殊数组,它具有更方便的运算符重载和线性代数函数。
以下是关于NumPy矩阵和通用函数的一些基本概念和常用操作:
创建矩阵:
import numpy as np
mat = np.matrix([[1, 2], [3, 4]])
矩阵运算:
矩阵相加:mat1 + mat2
矩阵相减:mat1 - mat2
矩阵相乘:mat1 * mat2
矩阵点乘(对应元素相乘)np.multiply(mat1, mat2)
矩阵转置:mat.T
矩阵特有的方法:
逆矩阵:mat.I
求解线性方程组:np.linalg.solve(mat, b)
矩阵的行列式:np.linalg.det(mat)
特征值和特征向量:np.linalg.eig(mat)
通用函数(Universal Functions,简称ufunc):
通用函数是NumPy中对ndarray进行逐元素操作的函数,常用于数组的数学运算和元素级别的操作。
数学函数:np.sin(arr), np.cos(arr), np.exp(arr), np.log(arr), 等等。
统计函数:np.mean(arr), np.sum(arr), np.max(arr), np.min(arr), np.std(arr), 等。
数组操作:np.sort(arr), np.unique(arr), np.concatenate((arr1, arr2), axis=0), 等。
这些是NumPy中矩阵和通用函数的基本概念和常用操作。矩阵提供了更方便的线性代数运算接口,而通用函数可用于对ndarray进行逐元素的数学和统计操作。您可以通过查阅NumPy官方文档了解更多有关矩阵和通用函数的详细信息和功能。
(3)利用 NumPy 进行统计分析;
(4)平面上有100个点,求任意2点间的欧式距离并将其保存到矩阵当中。
(5)程序代码存为“学号姓名b.py”,矩阵存为“学号姓名b.xls”;
(6)每个步骤需要运行结果截图,截图中需要加上水印,水印为自己的学号姓名。
2、数据示例
左图为二维坐标中的点,这100个点可任意生成,右图为保存点与点之间距离的矩阵,例如,点1和点2的距离就应该保存到矩阵1行2列和2行1列中,而1行1列、2行2列……100行100例均为零,因为每个点自己到自己的距离均为零。
项目二知识点
这段代码利用NumPy和Pandas库进行了以下操作:
1. NumPy库的使用:
使用np.random.seed()设置随机数种子,确保每次生成的随机数相同。
使用np.random.uniform()生成100个在0-10范围内的二维坐标点。
使用np.zeros()创建一个全零数组,作为存储距离矩阵的容器。
使用np.linalg.norm()计算任意两点之间的欧式距离。
使用np.zeros()和循环将计算得到的距离存储在距离矩阵中。
2. Pandas库的使用:
使用pd.DataFrame()将距离矩阵转换为Pandas的DataFrame对象。
使用df.to_excel()将DataFrame对象保存为Excel文件。
3. 主要操作:
生成100个随机的二维坐标点,范围在0-10之间。
计算任意两点之间的欧式距离,并将距离保存在一个100x100的距离矩阵中。
将距离矩阵保存到Excel文件中,使用Pandas的DataFrame和to_excel()方法。
这段代码涵盖了随机数生成、数组操作、欧式距离计算、Excel文件处理等方面的知识点。它展示了如何使用NumPy生成随机数和处理数组,以及如何使用Pandas将数据保存到Excel文件中。
【项目二实现】
1、创建文件
单击右键选择新建python文件2022231538陈鹏b.py
图2.1
2、安装pandas软件包
在终端输入pip install pandas 安装pandas软件包
图2.2
3、尝试随机生成100个坐标点
生成100个随机的二维坐标点 范围在0-10。np.random.seed(1) 设置随机数种子
图2.3
4、编写代码计算距离并将其保存到矩阵当中
计算任意两点之间的欧式距离。dist_matrix = np.zeros((100, 100)), 创建一个100行100列的全零数组。 将距离矩阵保存到Excel文件filename = "2022231538陈鹏b.xlsx"
图2.4
图2.5
5、代码
import numpy as np |
项目二总结
问题:
1.代码中使用`np.random.seed(1)`设置了随机数种子,这会确保每次运行生成相同的随机数。是否需要根据需求进行调整或移除这行代码?
2.项目要求生成的二维坐标点范围在0-10之间,但是在代码中没有对坐标点的范围进行限制。是否需要添加限制条件或者确认代码是否符合要求?
3.生成的距离矩阵是一个100x100的全零数组,是否需要考虑将对角线元素设置为零,因为每个点到自身的距离应该为零?
4.代码中使用了`pd.DataFrame(dist_matrix)`将距离矩阵转换为DataFrame对象,并保存为Excel文件。但是没有指定列名和索引名,是否需要添加相应的参数来提高可读性?
5.项目要求将Excel文件保存为"学号姓名b.xls",但是在代码中使用的文件名为固定的"2022231538陈鹏b.xlsx"。是否需要根据实际情况修改文件名或让用户自定义文件名?
6. 代码中是否需要添加异常处理机制来处理可能的错误,例如文件保存失败或其他运行时错误?
感受:
这个项目使用NumPy和Pandas库完成了以下操作:
1.使用NumPy生成了100个随机的二维坐标点,范围在0-10之间。
2.计算了任意两点之间的欧式距离,并将距离保存在一个100x100的距离矩阵中。
3.使用Pandas将距离矩阵转换为DataFrame对象,并将DataFrame保存为Excel文件。
总体而言,这个项目使用了NumPy和Pandas库来生成随机数、计算欧式距离并保存数据到Excel文件。然而,根据具体需求,可能需要对代码进行一些调整和改进,以确保符合要求并提高代码的可读性和健壮性。
问题情况请如看下图片
图2.6
图2.7
图2.8