三流Mayavi操作-Mayav-应用举例
秉着边学边写边折腾的原则,开始粗糙的工作。真正掌握还是得讲解给别人听。
先给出网课
https://www.icourse163.org/course/BIT-1001871001
Mayavi官方
http://docs.enthought.com/mayavi/mayavi/index.html
这里有不少例子的,主要都是一些比较小的例子,如果有必要,就后面再单开比较大的例子。
http://docs.enthought.com/mayavi/mayavi/mlab.html#a-demo
.
本来这个文章就是断断续续的,打算单开这一篇来写一些实用的绘制实例。
如果篇幅长了,就会重开一篇,初步设想就是几个例子一篇。
所以这篇是长期随时更新的,不完结。
绘制一些好玩的图。
1
*
扩展的实例。
前段时间刚开始接触机器学习,(菜鸡,你怎么才开始?啊对,就是菜鸡,就是才开始,萌新瑟瑟发抖。)
为了更好地巩固复习(现炒现卖)我决定,尽可能多做图,采用Mayavi
,适当的matplotlib
,这里
这是我想要的效果如下。(这个是网上偷的,我的图下面,我只绘制了1/4)
1.绘制基本外形
1.设置下降起点,我选的(2,3,13),这个无所谓
2.mgrid
离散网格,利用r1 = 0.25*(x1**2+y1**2)
获得网格高度r1
3.surf
分别绘制渐变的surface
和wireframe
,并选用热辣的LUT配色方案'hot'
(我喜欢),然后细节上微调线径宽度line_width=1.2
和opacity
两种最好不一样,我们需要强调的是网格,至于surface
只为了突出它的值是变化的,hot~
4.修饰outline
方便观察值域,xlable
这个稍微注意添加的位置,这里添加的位置是surf
下,surf
是全局绘制
5.绘制一个起点points3d
6.设置figure
的bgcolor
,这里是背景色。
start_x,start_y,start_z = 2,3,13 #下降起点
figure(bgcolor=(0.5,0.5,0.5))
x1,y1 = np.mgrid[0:3:15j, 0:3:15j] #离散不要太大,太密集不好观察
r1 = 0.25*(x1**2+y1**2)
surf(x1,y1,r1,colormap='hot',opacity=0.2)
surf(x1,y1,r1,colormap='hot',line_width=1.2,opacity=0.4,representation='wireframe')
xlabel('x')
outline(color=(1,0,0),opacity=0.8)
x_start,y_start,z_start = np.array([start_x]),np.array([start_y]),np.array([start_z])*0.25
points3d(x_start,y_start,z_start,z_start,colormap="copper",name='StartPoint',scale_factor=.05)
2.上面的部分绘制了一个下降起点和具有诱惑的网格,现在继续。
1.涉及符号计算
sympy
,做了必要的命名之后,diff()
进行求导,机器学习里面的alp
学习速率,再一并设置迭代次数times
,这里我只迭代10次。
2.中间的处理我不说了,都是计算
3.从points3d
开始绘制每次迭代之后产生的新的点,contour_surf
这次的用法唯一特殊在于contours
接受的是list,也就是以每个点所在的位置绘制等高线。quiver3d
也就是这篇文章的重点了,接受了6个参数,是对位置和三个方向的向量描述。最后,plot3d
把沿梯度下降的点连接起来。
theta0,theta1 = symbols('theta0,theta1')
f = theta0**2 + theta1**2
vector0,vector1 = f.diff(theta0),f.diff(theta1) #偏微
alp = 0.1 #下降速率
times = 10 #迭代次数
kx,ky = vector0.subs(theta0,start_x),vector1.subs(theta1,start_y)
list_x,list_y,list_z = [],[],[] #[start_x],[start_y],[start_z]
vect_x,vect_y,vect_z = [],[],[]
for ti in range(times):kx,ky = vector0.subs(theta0,start_x),vector1.subs(theta1,start_y) #斜率vect_x.append(float(-kx));vect_y.append(float(-ky));vect_z.append(-1)start_x -= alp*kx;start_y -= alp*ky;start_z = (start_x ** 2 + start_y ** 2)*0.25 #按方向下降list_x.append(float(start_x));list_y.append(float(start_y));list_z.append(float(start_z))
sca = [3 for num in range(times)]
points3d(list_x,list_y,list_z,sca,colormap='cool',name='GradientPoint',scale_factor=.04)
contour_surf(x1,y1,r1,contours=list_z,name='GradientContour',opacity=1)
quiver3d(list_x,list_y,list_z,vect_x,vect_y,vect_z,scale_factor=.1)
plot3d(list_x,list_y,list_z,sca,name='Connection',tube_radius=None,line_width=4.2)
show()
源码我都贴出来了。也上传了。
2.f(x,y)=(1−x)^2+100(y−x^2)^2
这图不是我画的,是别人家的图
https://blog.csdn.net/pengjian444/article/details/71075544?utm_source=blogxgwz0&tdsourcetag=s_pcqq_aiomsg
.
.
.这个图的代码绘制是非常好写的,这个图原图是采用的matplotlib
,先赞,做出来的图漂亮得没话说,印刷级的。
我们在Mayavi中重现它。
代码原型很简单,如下:
import numpy as np
from mayavi import mlab
x,y = np.mgrid[-3:3:40j,-1.5:3:40j]
z = (1-x)**2 + 100*(y-x**2)**2
mlab.surf()
mlab.show()
以上完成基本图形。
但是注意了,mayavi中会按照原始比例作图,z的值几k,x,y是小数点级别的变化,你会得到一个长条。所以要进行修改。
为了突出网格,
import numpy as np
from mayavi import mlab
#f(x,y)=(1−x)2+100(y−x2)2
x,y = np.mgrid[-2:2:60j,-1.5:3:60j]
z = (1-x)**2 + 100*(y-x**2)**2
z_max = np.max(z)
x_max = np.max(x)
adj_warp = x_max/z_max
sc = np.zeros_like(z)+1# adj_warp = 0.0005
mlab.surf(x,y,z,vmax=130,vmin=0,representation='wireframe',name='Grid',warp_scale=adj_warp)
mlab.surf(x,y,z,vmax=130,vmin=0,opacity=0.4,warp_scale=adj_warp)
mlab.outline(color=(1,0,0))
mlab.show()
.
中间我将继续追加梯度下降的绘制会在最后一步show()之前插入,然后会对这个图形继续进行修饰。
未更新完、
更新
2018.10.23. ——将原来写在2.1.0.5.points3d,.quiver3d
下的一个举例插过来、补充f(x,y)=(1−x)^2+100(y−x^2)^2
三流Mayavi操作-Mayav-应用举例相关推荐
- 三流Mayavi操作-Mayav-2.1.2-图形修饰函数 Figure decoration functions
秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...
- 三流Mayavi操作-Mayav-2.1.0 绘制函数,通用参数、目录。
秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...
- 三流Mayavi操作-Mayav-2.1.2-mesh、triangular_mesh绘制
秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...
- 三流Mayavi操作-Mayav-2.1.1-图形控制函数 Figure handling functions
秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...
- 你会处理圆周率吗?----- Python操作文件应用举例
呜呜呜,好久没更新了, 今天我们来聊聊IO流,之前我们用java中的IO流对文件进行了一些简单的操作,这次我们用Python作为基础语言来学习如何使用文件中的IO流. 有这样一道作业: 圆周率的前10 ...
- python使用redis在实际场景使用_用python操作redis及redis的一些应用场景
redis安装 网上很多windows.Linux的安装教程,可根据自己的需要寻找对应教程安装 redis-py安装 pip install redis redis可视化工具 API的使用 redis ...
- 转 C#对多个集合和数组的操作(合并,去重,判断)
在开发过程中.数组和集合的处理是最让我们担心.一般会用for or foreach 来处理一些操作.这里介绍一些常用的集合跟数组的操作函数. 首先举例2个集合A,B. List<int> ...
- Python学习入门基础教程(learning Python)--5.5 Python写操作详解
在前文5.3节我们简单的学习了如何在Python里进行文件的写操作,所举例里写入的都是字符串数据,那我们现在想写入数值型数据可以直接写入么?我们先看看下边的程序是否能正常运行? wfile = ope ...
- PySpark:DataFrame及其常用列操作
Spark版本:V3.2.1 1. DataFrame 虽然RDD是Spark最基本的抽象,但RDD的计算函数对Spark而言是不透明的.也就是说Spark并不知道你要在计算函数里干什么.无论你是要做 ...
最新文章
- JVM:垃圾回收相关算法
- R语言ggplot2可视化移除轴标签、图例、主体等所有附属信息实战
- checkbox已设置为checked--true-但不勾选问题解决方法(只第一次勾选有效)
- [Luogu 1351] NOIP2014 联合权值
- Learning Scrapy笔记(五)- Scrapy登录网站
- python进阶07 MySQL
- ubuntu 下的开发板的环境配置
- 【Linux系统】部分基础命令手册
- chromebook 笔记本 TrueNas 设置 wifi 连网
- Ubuntu 安装MinGW32出现Unable to locate package mingw32找不到安装包的解决方法和思路
- 华为将安卓系统迁移到鸿蒙OS,真·国产之光!华为鸿蒙OS发布,从安卓迁移只需要2天...
- 使用Canvas把照片转换成素描画
- 基于Opencv的图像卡通化
- 谷歌SEO英文外链建设指南
- python是哪种动物_基于Python的动物识别专家系统
- 疫情宅家厨艺秀 | 究竟是自学成大厨,还是厨房大翻车?
- STM32学习之新建工程模板
- ContentType 清单大全
- 定位教程5---移动相机
- 美国访问学者生活需要注意的七大事项