【科学计算语言】实验四 科学计算与可视化

news2025/2/1 21:03:06
【目的和要求】

(1)理解科学计算实质并掌握Python语言的科学计算应用

(2)掌握常用科学计算库

(3)熟练运用numpy及scipy、matplotlib等计算库资源 

【实验准备】

Python核心科学计算库的导入、配置并熟悉相关对象

【实验内容】

1. 实验练习:Numpy 应用包

NumPy 中除了可以使用 numpy.transpose 函数来对换数组的维度,还可以使用 T 属性。。

例如有个 m 行 n 列的矩阵,使用 t() 函数就能转换为 n 行 m 列的矩阵。

实例

import numpy as np a = np.arange(12).reshape(3,4) print ('原数组:') print (a) print ('\n') print ('转置数组:') print (a.T)

输出结果如下:

原数组:

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

转置数组:

[[ 0 4 8]

[ 1 5 9]

[ 2 6 10]

[ 3 7 11]]

matlib.empty()

matlib.empty() 函数返回一个新的矩阵,语法格式为:

numpy.matlib.empty(shape, dtype, order)

参数说明:

  1. shape: 定义新矩阵形状的整数或整数元组
  2. Dtype: 可选,数据类型
  3. order: C(行序优先) 或者 F(列序优先)

实例

import numpy.matlib import numpy as np print (np.matlib.empty((2,2))) # 填充为随机数据

输出结果为:

[[-1.49166815e-154 -1.49166815e-154]

[ 2.17371491e-313 2.52720790e-212]]

numpy.matlib.zeros()

numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。

实例

import numpy.matlib import numpy as np print (np.matlib.zeros((2,2)))

输出结果为:

[[0. 0.]

[0. 0.]]

numpy.matlib.ones()

numpy.matlib.ones()函数创建一个以 1 填充的矩阵。

实例

import numpy.matlib import numpy as np print (np.matlib.ones((2,2)))

输出结果为:

[[1. 1.]

[1. 1.]]

numpy.matlib.eye()

numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。

numpy.matlib.eye(n, M,k, dtype)

参数说明:

  1. n: 返回矩阵的行数
  2. M: 返回矩阵的列数,默认为 n
  3. k: 对角线的索引
  4. dtype: 数据类型

实例

import numpy.matlib import numpy as np print (np.matlib.eye(n = 3M = 4k = 0dtype = float))

输出结果为:

[[1. 0. 0. 0.]

[0. 1. 0. 0.]

[0. 0. 1. 0.]]

numpy.matlib.identity()

numpy.matlib.identity() 函数返回给定大小的单位矩阵。

单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。

实例

import numpy.matlib import numpy as np # 大小为 5,类型位浮点型 print (np.matlib.identity(5dtype = float))

输出结果为:

[[ 1. 0. 0. 0. 0.]

[ 0. 1. 0. 0. 0.]

[ 0. 0. 1. 0. 0.]

[ 0. 0. 0. 1. 0.]

[ 0. 0. 0. 0. 1.]]

numpy.matlib.rand()

numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。

实例

import numpy.matlib import numpy as np print (np.matlib.rand(3,3))

输出结果为:

[[0.23966718 0.16147628 0.14162 ]

[0.28379085 0.59934741 0.62985825]

[0.99527238 0.11137883 0.41105367]]

矩阵总是二维的,而 ndarray 是一个 n 维数组。 两个对象都是可互换的。

实例

import numpy.matlib import numpy as np i = np.matrix('1,2;3,4') print (i)

输出结果为:

[[1 2]

[3 4]]

实例

import numpy.matlib import numpy as np j = np.asarray(i) print (j)

输出结果为:

[[1 2]

[3 4]]

实例

import numpy.matlib import numpy as np k = np.asmatrix (j) print (k)

输出结果为:

[[1 2]

[3 4]]

2实验练习:Numpy 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 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 6]

以上实例中,我们首先通过 arange() 函数创建 ndarray 对象。 然后,分别设置起始,终止和步长的参数为 2,7 和 2。

我们也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作:

实例

import numpy as np a = np.arange(10) b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2 print(b)

输出结果为:

[2 4 6]

冒号 : 的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

实例

import numpy as np a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9] b = a[5] print(b)

输出结果为:

5

实例

import numpy as np a = np.arange(10) print(a[2:])

输出结果为:

[2 3 4 5 6 7 8 9]

实例

import numpy as np a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9] print(a[2:5])

输出结果为:

[2 3 4]

多维数组同样适用上述索引提取方法:

实例

import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print(a) # 从某个索引处开始切割 print('从数组索引 a[1:] 处开始切割') print(a[1:])

输出结果为:

[[1 2 3]

[3 4 5]

[4 5 6]]

从数组索引 a[1:] 处开始切割

[[3 4 5]

[4 5 6]]

切片还可以包括省略号 ,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。

实例

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

输出结果为:

[2 4 5]

[3 4 5]

[[2 3]

[4 5]

[5 6]]

3. scipy库应用:scipy.cluster 聚类scipy.constants 数学常量scipy.fft 快速傅里叶变换scipy.integrate 积分scipy.interpolate 插值scipy.io 数据输入输出scipy.linalg 线性代数scipy.misc 图像处理scipy.ndimage N 维图像scipy.odr 正交距离回归scipy.optimize 优化算法scipy.signal 信号处理scipy.sparse 稀疏矩阵scipy.spatial 空间数据结构和算法scipy.special 特殊数学函数scipy/stats 统计函数

以上为scipy子库,请同学熟悉库名

实例求解f(x)=2*sin(x)-x+1参考程序:

def f1(x):

       return np.sin(x)*2-x+1

value = fsolve(f1,[2])

print(value)

4.Numpy实例 卫星GPS定位

 上述6个卫星S1-S6和地球在高速运动,从卫星发出的位置信息以光速传输到GPS接收端需要一定的时间。  假设(x,y,z,t)表示R当前的位置, t是R的相对时间,卫星S1(发出信号时刻)到(当前接收时刻)满足以下关系(其中c是光速)。 (x-3)^2 + (y-2)^2 + (z-3)^2 = [(10010.00692286 – t)*c]^2, 该公式表示以(x, y, z,t)为参数的(欧式空间距离)与信号传输距离相等。对于卫星S1,S2,…,S6,满足方程组:...(1)

其中,光速为常数c=0.299792458km/us,上述方程组是非线性的,但很容易将所有二次项都消去(每个公式减去第一个公式),从而得到:

此时,上述等式变成了A*X=B形式,根据线性代数方法,X=A-1*B,即只需对系数矩阵求逆,再乘以常数矩阵便可以得到方程组的解。GPS定位的问题建模: 上面给出了GPS的定位原理,如何利用计算机辅助GPS的定位计算呢? 以6颗卫星为例,GPS定位计算问题的IPO模式----描述如下: 输入:6颗卫星的欧式坐标和信号时间戳 处理:GPS定位算法 输出:GPS接收设备的地理坐标和当前时间假设第i颗卫星的坐标和时间戳表示为(x_i, y_i ,z_i ,t_i ),结合上述例子,GPS定位算法可以描述为如下公式:

下面将使用Numpy函数库实现上述矩阵操作。程序中用到的函数:

numpy.dot(a,b):计算矩阵a与矩阵b的点积

numpy.linalg.inv(a):求矩阵a 的逆矩阵

GPS定位的程序实现 Python代码如下: 其中zeros是NumPy提供的函数,用来建立指定维度的数组, zeros用来生成数组x用来存储接受来自外部输入的六颗卫星坐标, 数组a,b用来存放前面算法中的系数矩阵,

参考程序:【请阅读并分析写出主要代码】

from numpy import *

def main_GPSLocation():

    i = 1

    c = 0.299792458  # 光速 0.299792458km/us

    x = zeros((6, 4)) #存储6个卫星的(x,y,z,t)参数

    while i<=6:

        print(" %s %d" % ("please input (x,y,z,t) of group",i) )

        temp=input()

        x[i-1]=temp.split()

        j=0

        while j<4:

            x[i-1][j]=float(x[i-1][j])

            j=j+1

        i=i+1

    a=zeros((4,4)) #系数矩阵

    b=zeros((4,1)) #常数项

    j=0

    while j<4:

        a[j][0]=2*(x[5][0]-x[j][0])

        a[j][1]=2*(x[5][1]-x[j][1])

        a[j][2]=2*(x[5][2]-x[j][2])

        a[j][3]=2*c*c*(x[j][3]-x[5][3])

        b[j][0]=x[5][0] * x[5][0] - x[j][0] * x[j][0] + \

                x[5][1] * x[5][1] - x[j][1] * x[j][1] + \

                x[5][2] * x[5][2] - x[j][2] * x[j][2] + \

            c*c*(x[j][3] * x[j][3] - x[5][3] * x[5][3])

        j=j+1

    a_ni=linalg.inv(a) #系数矩阵求逆

    print(dot(a_ni,b))

main_GPSLocation()

【思考题】

  1. 请思考Python numpy库中针对数组的操作与列表、元组等序列数据处理有何联系及区别?
  2. 如果想在scipy子库linalg中增加一些针对矩阵的处理代码,如何实现?请谈谈自己的。

Python的NumPy库提供了对数组进行高效处理的功能,与列表和元组等序列数据处理有着联系和区别。

联系:

  • 数据处理:NumPy的数组(numpy.array)和Python的列表(list)都可以存储多个元素,并进行索引、切片等操作。
  • 元素访问:两者都可以通过索引访问元素,但NumPy数组支持更多的高效操作,例如支持向量化操作和广播。
  • 数据类型:NumPy数组可以指定特定的数据类型(例如int32float64等),而列表则可以包含不同类型的对象。

区别:

  • 性能:NumPy数组在执行数值计算时通常比Python列表更高效,因为NumPy是基于C语言编写的,拥有更多的优化和内置函数。
  • 维度:NumPy数组可以是多维的(例如二维矩阵),而Python列表通常是一维的,可以嵌套以实现多维效果。
  • 功能:NumPy提供了许多数学和统计函数,例如求和、平均值、矩阵乘法等,这些函数对于数组操作非常方便。

关于在SciPy子库(比如scipy.linalg)中增加针对矩阵处理的代码,一般可以通过以下步骤实现:

  1. 了解子库的结构和需求:首先需要深入了解scipy.linalg子库中已有的功能和提供的矩阵处理方法,确保你的添加是有意义且没有重复的。

  2. 贡献代码:你可以参考SciPy的贡献指南,一般来说,你可以先在GitHub上找到SciPy仓库,进行Fork,然后修改代码并提交Pull Request。在修改代码之前,最好先在邮件列表或者GitHub上提出你的想法,以便其他开发者提供反馈和指导。

  3. 编写文档和测试:编写清晰的文档说明你添加的新功能,包括用法、示例和可能的注意事项。同时,编写测试用例来验证新功能的正确性和稳定性。

  4. 遵循社区规范:在贡献代码时,遵循SciPy项目的代码风格、规范和最佳实践,确保你的代码与现有代码风格一致,并通过项目的审核和测试流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive-high Avaliabl

hive—high Avaliable ​ hive的搭建方式有三种&#xff0c;分别是 ​ 1、Local/Embedded Metastore Database (Derby) ​ 2、Remote Metastore Database ​ 3、Remote Metastore Server ​ 一般情况下&#xff0c;我们在学习的时候直接使用hive –service metastore的方式…

基于ChatGLM搭建专业领域问答机器人的思路

如果我们对ChatGLM进一步提出涉及专业领域的问题&#xff0c;而此方面知识是ChatGLM未经数据训练的&#xff0c;那么ChatGLM的回答效果如何呢&#xff1f;本节将考察ChatGLM在专业领域的问答水平&#xff0c;并尝试解决此方面的问题。 在使用ChatGLM制作专业领域问答机器人之前…

【Amazon 实验①】Amazon WAF功能增强之实验环境准备

文章目录 1. 实验介绍2. 实验环境准备 1. 实验介绍 在真实的网络空间中&#xff0c;攻击者会使用大量广泛分布的僵尸网络、肉机等发起对目标的攻击。 其来源分布一般比较分散&#xff0c;因此难以简单防范。 本实验联合使用有多种AWS服务&#xff1a;Cloudfront、 Lambdaedge…

服务器数据恢复-服务器断电导致linux操作系统数据丢失的数据恢复案例

linux操作系统服务器数据恢复环境&#xff1a; 某品牌R730服务器MD3200系列存储&#xff0c;linux操作系统。 服务器故障&#xff1a; 机房意外断电导致服务器linux操作系统部分文件丢失。 服务器数据恢复过程&#xff1a; 1、将故障服务器连接到北亚企安数据恢复中心备份服务器…

【开源工程及源码】超级经典开源项目实景三维数字孪生智慧港口

智慧港口可视化平台&#xff0c;旨在实现对港口运营的全面监测、智能管理和优化决策。飞渡科技利用数字化、模拟和仿真的技术&#xff0c;通过互联的传感器和设备&#xff0c;实现实时数据的采集、传输和分析&#xff0c;将港口内外的复杂数据以直观、易懂的方式呈现&#xff0…

前端学习——vuex的入门

学习一门技术最快捷的方式就是先了解其概念和使用场景&#xff0c;毕竟任何技术的出现都是为了解决某一个场景下的通用解决方案&#xff0c;并且使用最合理的方式去解决问题。 那么什么是vuex&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中…

Python---搭建Python自带静态Web服务器

1. 静态Web服务器是什么&#xff1f; 可以为发出请求的浏览器提供静态文档的程序。 平时我们浏览百度新闻数据的时候&#xff0c;每天的新闻数据都会发生变化&#xff0c;那访问的这个页面就是动态的&#xff0c;而我们开发的是静态的&#xff0c;页面的数据不会发生变化。 …

使用 Postman 进行并发请求:实用教程与最佳实践

背景介绍 最近&#xff0c;我们发起了一个在线图书管理系统的项目。我负责的一个关键模块包括三个主要后台接口&#xff1a; 实现对books数据的检索。实施对likes数据的获取。通过collections端点访问数据。 应对高流量的挑战 在设计并部署接口时&#xff0c;我们不可避免地…

tomcat和nginx自定义404错误页面

nginx 编辑nginx配置文件 vim /www/server/nginx/nginx.conf server{listen 80;error_page 404 /404.html;location /404.html{root /home/liu/html/error-html;} }在家目录下创建一个html/error-html目录&#xff0c;用于存放错误页面 在error-html目录下创建404.html&a…

心有暖阳,笃定前行,2024考研加油

2024考研学子&#xff0c;所有的付出终有收获&#xff0c;阳光终将穿透阴霾&#xff0c;终将上岸。 当曙光破晓的时候&#xff0c;你可曾记得那些星月为伴&#xff0c;孤独为友&#xff0c;理想为灯来指引前行之路的日子&#xff0c;那些默默扎根的日子终将化作星星在未来闪闪发…

第一部分 数理逻辑

目录 什么是命题 注意&#xff1a; 例1 下列句子中那些是命题&#xff1f; 联结词 例2 将下列命题符号化. 注意&#xff1a; 例4 设 p&#xff1a;天冷&#xff0c;q&#xff1a;小王穿羽绒服&#xff0c;将下列命题符号化 例5 求下列复合命题的真值 例如 真值表: 例&#xff1…

我的应用我做主:扩展线程池

自定义线程创建&#xff1a;ThreadFactory 线程池中的线程是从哪里来的呢&#xff1f; ThreadPoolExecutor(int corePoolSize,//指定了线程池种的线程数量 int maximumPoolSize,//指定了线程池中的最大线程数量。 long keepAliveTime,// 当线程池数量超过了corePoolSize&#x…

MyBatis关联查询(二、一对多查询)

MyBatis关联查询&#xff08;二、一对多查询&#xff09; 需求&#xff1a;查询所有用户信息及用户关联的账户信息。 分析&#xff1a;用户信息和他的账户信息为一对多关系&#xff0c;并且查询过程中如果用户没有账户信息&#xff0c;此时也要将用户信息查询出来&#xff0c…

Python (十四)pandas(二)

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

WPF组合控件TreeView+DataGrid之DataGrid封装-粉丝专栏

wpf的功能非常强大&#xff0c;很多控件都是原生的&#xff0c;但是要使用TreeViewDataGrid的组合&#xff0c;就需要我们自己去封装实现。 我们需要的效果如图所示&#xff1a; 这2个图都是第三方控件自带的&#xff0c;并且都是收费使用。 现在我们就用原生的控件进行封装一…

rouyi-vue-pro+vue3+vite4+Element Plus项目中使用生成Vue2+Element UI标准模板

运行一个pro-vue3的前端项目&#xff0c;以及后端服务 在基础设施-代码生成模块中选择某张数据库表导入&#xff0c;并编辑生成信息&#xff0c;前端类型&#xff1a;Vue2Element UI标准模板 在vue3项目中创建一个vue文件 <template> </template><script>…

云轴科技ZStack 英特尔联合成立云系统解决方案创新中心

近日&#xff0c;云轴科技ZStack 与英特尔联合成立云系统解决方案创新中心&#xff0c;并完成揭牌仪式。双方将基于多年合作基础进一步加快研发下一代创新技术和解决方案&#xff0c;为客户和合作伙伴提供更高效、安全的云基础设施解决方案。 左三:云轴科技ZStack 联合创始人兼…

4.3【共享源】克隆实战开发之截屏(一)

一,Screen截屏介绍 Screen的截屏是指从源读取像素,然后复制到缓冲区。然后可以根据需要操纵缓冲区;它可以简单地写入文件,也可以在其他窗口或显示器中使用。 Screen API从源中读取像素,并将其复制到提供的缓冲区中以捕获截屏。缓冲区可以是pixmap或窗口缓冲区,但必须设…

Pytorch常用的函数(五)np.meshgrid()和torch.meshgrid()函数解析

Pytorch常用的函数(五)np.meshgrid()和torch.meshgrid()函数解析 我们知道torch.meshgrid()函数的功能是生成网格&#xff0c;可以用于生成坐标&#xff1b; 在numpy中也有一样的函数np.meshgrid()&#xff0c;但是用法不太一样&#xff0c;我们直接上代码进行解释。 1、两者…

如何进行USB丢弃攻击?

USB丢弃攻击&#xff0c;类似于一场表演艺术&#xff0c;您需要构建一个引人入胜的故事&#xff0c;激发目标的好奇心&#xff0c;让他们忽略基本的安全意识&#xff0c;插入您精心准备的USB设备! 本文章仅限娱乐&#xff0c;请勿模仿或进行违法活动&#xff01; 一、选择放置…