python 二元函数绘制_Python绘制二元函数曲面

微实践:绘制二元函数曲面

我们将演示如何借助于ufunc的广播运算计算下述二元函数的在一个xy平面上的值并将其绘制成3D曲面。其中,x和y的取值范围均为[-2,+2]。

为了达到目的,我们需要一个二维的结果数组z,其元素的下标对应参数x,y的取值,其元素的值则为上述函数的函数值。这可以通过广播计算来得到。

本文节选自作者的《Python编程基础及应用》视频教程。Python编程基础及应用_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

np.ogrid是个特殊对象,通过切片下标来生成用于广播运算的数组。先看下述程序:

#ogrid.py

x,y = np.ogrid[0:3:4j,0:4:5j]

print("x=\n",x)

print("y=\n",y)

print("x.shape=",x.shape)

print("y.shape=",y.shape)

执行结果:

x=

[[0.]

[1.]

[2.]

[3.]]

y=

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

x.shape= (4, 1)

y.shape= (1, 5)

0:3:4j这种切片语法类似于np.linspace(0,3,4),它表示生成从0到3的包含4个元素的等差数列。这里的j并不表示复数的虚部,它只是一种语法格式。由于广播的需要,x的形状被设置为(4,1)。同理,由于广播需要,y的形状被设置成了(1,5)。这样,通过ogrid生成的x和y数组符合广播运算的规则,可以进行广播运算。

下述代码将x = [-2,+2],y = [-2, +2]的函数值矩阵以平面图形式绘制。

#func2d.py

import numpy as np

from matplotlib import pyplot as plt

from matplotlib import cm

y,x = np.ogrid[-2:2:200j,-2:2:200j]

z = x * np.exp(-x**2-y**2)

extent = [np.min(x),np.max(x),np.min(y),np.max(y)]

plt.imshow(z,extent=extent,cmap=cm.gray)

plt.colorbar()

plt.show()

根据ogrid的输出,y,x分别是形状为(200,1)和(1,200)的数组。z = x * np.exp(-x**2-y**2)的执行过程中将发生广播,结果数组z将会是一个形状为(200,200)的二维数组,元素值为对应x,y的函数值。如果将z视为一个图像,那么其横向x取值范围对应[-2,+2],纵向y取值范围取应[-2,+2]。

extent = [np.min(x),np.max(x),np.min(y),np.max(y)]将x及y的取值范围放入一个列表。plt.imshow()函数将二维数组z作为图像显示,extent参数指明了横纵坐标的范围,cmap则指定了颜色映射对象,该颜色映射对象负责把z中的元素值转换成像素点的颜色。plt.colorbar()则“聪明”通过颜色条显示z中的函数值与颜色之间的对应关系。plt.show()真正地把图表显示出来。执行结果如下:

下述代码将x = [-2,+2],y = [-2, +2]的函数值矩阵以3D图形式绘制。

#func3d.py

import numpy as np

import mpl_toolkits.mplot3d

from matplotlib import pyplot as plt

from matplotlib import cm

x,y = np.mgrid[-2:2:20j,-2:2:20j]

z = x * np.exp(- x**2 - y**2)

fig = plt.figure(figsize=(8,6))

ax = fig.gca(projection='3d')

ax.plot_surface(x,y,z,cmap=cm.ocean)

plt.show()

ax是表示一个子图,由于ax.plot_surface()函数要求x,y,z三个数组都必须是相同形状的二维数组,所以上述代码中没有使用ogrid来生成广播数组,而是使用了mgrid。mgrid的功能与ogrid相近,区别在于其返回的是已经进行了形状扩充的数组。也就是说,上述通过mgrid生成出来的x,y数组的形状已经是(20,20)。读者可以自行打印x,y的值出来观察mgrid对象的用法。读者如果对matplotlib相关代码感到疑惑,请先略过,本书后续部分将解读matplotlib包的使用。上述程序执行结果如下:

本文节选自作者的B站MOOC及同名教材:Python编程基础及应用 — 重庆大学 高等教育出版社,作者亲授_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com版权声明 本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。 本文不可以以纸质出版为目的进行改编、摘抄。

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

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

相关文章

Npgsql使用入门(三)【批量导入数据】

Program.cs代码: class Program{static void Main(string[] args){var test new PgBulkCopyHelper<SingleBuilding>("bld_amap_gzmain");foreach (string pName in test.PropNames){Console.WriteLine("name: {0},\t\ttype: {1}", pName, test.Prop…

远程网络视频监视技术

目前要实现广域网视频监视&#xff0c;主要通过三种方式实现&#xff1a;1.硬盘录像机&#xff1b;2.网络视频服务器&#xff1b;3.网络摄像机。 硬盘录像机是一个以录像为主的设备&#xff0c;有的可以支持IE浏览。网络视频服务器一般前端不录像&#xff0c;直接将影像传输到…

Deepin下java开发环境部署

简介 本经验由深度论坛用户(zhang12345shun)分享&#xff0c;原文地址 正文 SUN JDK&#xff08;现已改名Oracle JDK&#xff09; 1.下载Sun版JDK压缩包&#xff08;.tar.gz&#xff09;&#xff0c;选择其中的32/64位Linux版本。 2.将其解压缩&#xff1a; sudo tar -zx…

判断ic卡类型

传15读卡片数据 判断data8的status是否为0&#xff0c;是则是ic 否则就是磁条卡 根据二磁道数据识别是IC卡还是磁条卡 根据二磁道符号后面第一位识别。规则是 该数字 6 或者 2 则该卡是IC卡&#xff0c;否则是普通磁条卡 转载于:https://www.cnblogs.com/wubenhui/p/6956256.h…

python常用代码_Python常用算法学习(3)(原理+代码)——最全总结

1&#xff0c;什么是算法的时间和空间复杂度算法(Algorithm)是指用来操作数据&#xff0c;解决程序问题的一组方法&#xff0c;对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但是在过程中消耗的资源和时间却会有很大的区别。那…

数据监测驱动下的信息流广告优化

信息流广告是什么 “今日头条和百度必有一战”&#xff0c;相信不少的互联网人在过去几个月都听到过类似的断言。定位于信息分发平台的今日头条和主营搜索业务的百度会产生如此大的利益冲突&#xff0c;最核心的点其实就是信息流广告。 信息流广告指的是在用户使用互联网产品或…

在idea中使用git管理你的项目

起步 idea是十分智能的Java集成开发环境 而我们在用idea写项目的时候经常遇到版本控制的问题,而git工具如果你只会在终端中的git命令来进行控制,可能会使得效率低下 今天小编就教大家在idea中使用git来管理你的项目 首先创建一个项目 点击create new projects 这里选择默认…

react-native热更新插件react-native-code-push

使用react-native-code-push插件来实现热更新的时候&#xff0c;会遇到一些问题。下面这个问题就让我差点崩溃了。 在测试 Production 和 Staging 是否会去检查各自环境下的bundle文件&#xff0c;我就遇到了混乱的问题。 有时候用 Release 打包出来的app会去检查 Staging 下的…

《工业控制网络安全技术与实践》一一第3章 工业控制网络安全威胁

第3章 工业控制网络安全威胁 第2章介绍了工业控制系统的相关知识。本章主要介绍工业控制网络的基本知识&#xff0c;并详细介绍工业控制网络的常见安全威胁。之后&#xff0c;分析工业控制系统的脆弱性。

多媒体视频知识入门贴zt(二)

2.2 音视频基本概念介绍 2.2.1 视频的基本概念 RGB和YUV RGB指的是红绿蓝&#xff0c;应用还是很广泛的&#xff0c;比如显示器显示&#xff0c;BMP文件格式中的像素值等&#xff1b;而YUV主要指亮度和两个色差信号&#xff0c;被称为luminance和chrominance他们的转化关系可以…

Java笔记01-数组相关

数组相关 数组的创建 数据类型[] 数组名称 new 数据类型[数组的长度]其中数据类型可以为任意类型 数组的访问 • 调用数组的length属性可以获取数组的长度&#xff1a; int len arr.length;• 可以通过下标的方式访问数组中的每一个元素。 需要注意的是&#xff1a;数组…

偏好设置

转载于:https://www.cnblogs.com/xufengyuan/p/6959424.html

keyshot环境素材文件_快速学会keyshot基础渲染的步骤

KeyShot是基于CPU为三维数据进行渲染和动画操作的独立渲染器。意为“The Key to Amazing Shots”&#xff0c;是一个互动性的光线追踪与全域光渲染程序&#xff0c;无需复杂的设定即可产生相片般真实的 3D 渲染影像。KeyShot超强的渲染能力广泛的应用于工业产品、机械工程、CG行…

传统数据中心如何实现向云的平滑升级

1.引言 众所周知&#xff0c;云计算是近年来发展最快的互联网技术&#xff0c;被称为第四次IT革命。据权威机构预测&#xff0c;到2016年&#xff0c;2/3的IT应用服务将建立在云架构上 [1]。作为云计算核心的基础承载设施&#xff0c;数据中心在网络中所扮演的角色也愈加重要。…

UGUI滚动列表ScrollView使用注意点

ScrollView的Viewport不能引用其子节点Grid&#xff0c;不然会导致ScrollView滚到头时还能继续滚动&#xff0c;无法回滚 转载于:https://www.cnblogs.com/lovesharing/p/6963062.html

Java笔记02-OOP

面向对象编程 万物皆对象 面向对象指以属性和行为的观点去分析现实生活中的事物 面向对象编程指先以面向对象的思想进行分析,然后使用面向对象的编程语言进行表达的过程 面向对象编程是软件产业化发展的需求 理解面向对象的思想精髓才行 面想对象的三大特性 封装 继承 …

上位机与基恩士plc以太网通讯_2020湛江AB罗克韦尔PLC主机回收二手或全新

2020湛江AB罗克韦尔PLC主机回收二手或全新专业回收基恩士光电传感器回收&#xff0c;基恩士安全光栅回收&#xff0c;基恩士对射开关回收&#xff0c;基恩士工控配件回收&#xff0c;基恩士视觉相机回收&#xff0c;发那科伺服驱动电机回收&#xff0c;发那科控制系统回收&…

经常使用的 WEB server

对于刚開始学习的人来说&#xff0c;或许自己能够写出一些简单的演示样例DEMO&#xff0c;但却纠结于不知道应该怎样才干訪问自己的页面&#xff0c;这里进行了一些简单的WEBserver总结。便于新朋友配置使用 静态HTML页面 对于静态HTML页面不须要webserver&#xff0c;直接右键…

多媒体视频知识入门贴zt(一)

一 基础篇 1.1 图形、图像和视频图形&#xff08;graphic&#xff09;&#xff1a;和图像与视频不同&#xff0c;有一种说法是图形就是自然界的客观世界不存在的图案。对于计算机中的图形研究&#xff0c;有专门的计算机图形学&#xff0c;主要的 研究对象是点、线、面等抽象事…

Java笔记03-Constructor Override

Java笔记03-Constructor & Override 构造方法基本概念 构造方法是类中的一种特殊方法 它是在类创建对象(实例化)的时候自动调用的方法 这个和python中的__init__初始化魔术方法类似 可以在创建对象的时候进行参数的传递 默认送您的构造 一个类编译过后都需要有一个构…