数据处理及可视化——掌握 NumPy(项目2/3)

本文介绍了如何使用NumPy的ndarray和矩阵进行数值计算,包括创建、操作、统计分析,以及如何结合Pandas处理数据,如生成随机坐标、计算两点间欧式距离并以DataFrame形式保存到Excel文件。
摘要由CSDN通过智能技术生成

项目二

【项目二描述】

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
import pandas as pd
# 生成100个随机的二维坐标点 范围在0-10
np.random.seed(1# 设置随机数种子
points = np.random.uniform(low=0, high=10, size=(100, 2))
# 计算任意两点之间的欧式距离
dist_matrix = np.zeros((100, 100))  # 创建一个100100列的全零数组
for i in range(100):
   
for j in range(i+1, 100):
        distance = np.linalg.norm(points[i] - points[j])
        dist_matrix[i, j] = distance
        dist_matrix[j, i] = distance

# 将距离矩阵保存到Excel文件
df = pd.DataFrame(dist_matrix)
filename =
"2022231538陈鹏b.xlsx"
df.to_excel(filename, index=False)

项目二总结

问题:

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

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值