Python科学计算和绘图入门

用到的相关模块

  • scipy
  • numpy
  • matplotlib
  • mayavi
模块安装

主要就是这四个模块,如果要安装的话,前三个可以直接使用sudo pip install xxx来安装。对于mayavi,安装起来比较复杂,主要是vtk的安装,我安装了几次都没有成功,不管是使用ccmake还是使用independent installer都没法用,在尝试了一个下午之后,发现了python科学计算的神器Canopy。 Canopy是Python科学计算的集成环境,里面集成了你所知道,你所需要的所有python科学计算需要的module,这是他的主页截图。

我在Package Manager中直接搜索下载了mayavi,一键完成安装,特别方便,推荐所有用Python科学计算,或者是为了毕业论文等同学使用Canopy,我要是早发现就好了!

科学计算

常量主要是在numpy包里,np.e,np.pi之类的,当然先要导入这个包。

import numpy as np

简单的运算也通过numpy完成,比如np.cos,np.sin,np.tan之类的,可以尝试,基本的运算都在里面。 对于积分运算,需要使用scipy中的integrate模块,关于scipy的参考文档,可以参考这里。下面是一个简单的求黑体的辐射的积分,还自带误差,对数值计算有要求的同学有福了。

#encoding:utf-8
from scipy import integrate
import numpy as np
#函数定义
def blackBodyM(x,c1,c2,T):
    return (c1/(x**5))*(1/((np.e**(c2/(x*T)))-1))
c1 = 3.7415*10**8
c2 = 1.43879*10**4
T = 800
#结果,误差
resut,err = integrate.quad(blackBodyM,3,5,args=(c1,c2,T))

绘图

重头戏来了,python的绘图功能,完全不亚于matlab,matlab能做的,python里面都能实现,对于2D绘图,不管是函数图像还是数值统计图,都可以使用matplotlib库来完成。当然,也可以用matplotlib来完成3D绘图,不过个人对比体验了下,3D绘图,尤其是建模,还是使用mayavi更方便快速。 从matplotlib参考文档mayavi参考文档对比也可以发现,mayavi主要针对3D建模,matplotlib主要是2D绘图。

2D绘图

下面我对matplotlib的主要绘图模块pyplot分析。 我们画一个这样的图像。

#序之前的代码
def functionI(fi,ks,n,a,e0):
    return e0*ks*((-350*np.sin(fi)+(700*np.sqrt(3)/2)*np.cos(fi))**n)*a*a*np.cos(fi)
from matplotlib import pyplot as plt
plt.figure(1)
#图1:n不变,ks变化
#fi的取值范围 0-pi/2,分100个点
fi = np.linspace(0,np.pi/2,100)
ax1 = plt.subplot(211)
plt.sca(ax1)
#ks = 0.1-0.9 n=5
for ks in range(1,10):
    ks = ks*0.1
    plt.plot(fi,functionI(fi,ks,3,1,e0),label='ks='+str(ks))
    plt.legend(loc='upper right',bbox_to_anchor = (1, 1.15))
plt.xlabel(u'角度fi')
plt.ylabel(u'n=5,ks变化   辐射强度I')
ax2 = plt.subplot(212)

#ks = 0.5,n=2-10
for n in range(2,11):
    plt.plot(fi,functionI(fi,0.5,n,1,e0),label='n='+str(n))
    plt.legend(loc='upper right',bbox_to_anchor = (1, 1.15))
plt.xlabel(u'角度fi')
plt.ylabel(u'ks=0.5,n变化   辐射强度I')
plt.show()

几个地方说明一下:

  • np.linspace:构造线性list,用来取点,其实画函数图像的本质就是画很多点,然后连接起来。
  • plt.figure:运行以后,一个figure对应一个plt.show(),其实就是对应一个窗口。
  • plt.subplot:一个figure里有多少个图像(坐标轴),每次运行这个返回一个ax坐标轴对象,每次走完这行代码,就选中这个ax,接下来的操作都是在这个ax上完成的。
  • plt.legend:图例显示。
  • 以上函数的所有的参数都可以在matplotlib参考文档中找到。
3D建模

这里介绍一下使用mayavi进行模拟光照实验(Phong模型),首先使用如下代码构造一个表面。

import numpy as np
from mayavi import mlab
x, y = np.mgrid[-3:3:150j,-3:3:150j]
z =x**2+y**2+2
surf = mlab.surf(x, y, z, colormap='RdYlBu', warp_scale='auto')
surf.actor.property.interpolation = 'phong'
#对应参数表面反射率和n高光系数
surf.actor.property.specular = 0.5 #ks
surf.actor.property.specular_power = 2 #n
mlab.show()

运行以后得到一个这样的模型表面,为了展示整个表面,这里使用4处光照。

点击左上角很酷的那个按钮,可以打开表面参数设置和光照设置。

可以看到这里使用4个白光光源照射。并且可以很方便的进行参数设置。 当然这里我也用matplotlib画了同样的图形,但跑起来的时候机器很卡,使用matplotlib处理便面和光照,还需要使用其他的库来辅助,这里只贴出import的部分代码。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LightSource

总之处理和模型有关的3D,还是使用mayavi,简单粗暴。 如果需要更深入的学习,还是需要看计算机图形学和相关库的参考文档。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

TensorFlow的安装与初步了解

今天终于有时间一探滕三福了,TensorFlow(腾三福)是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tenso...

3536
来自专栏新智元

谷歌、亚马逊和百度的深度学习野心:TensorFlow、MXNet、PaddlePaddle 三大框架对比

【新智元导读】本文作者陈汝丹从定位、框架使用、分布式构成三个方面比较了 TensorFlow、MXNet、PaddlePaddle三个常用开源框架。 本文转载自...

3676
来自专栏CDA数据分析师

工具 | Python 和 R 数据分析/挖掘工具互查

在此总结一些在数据分析/挖掘中可能用到的功能,方便大家索引或者从一种语言迁移到另一种。如果大家已经熟悉python和R的模块/包载入方式,那下面的表查找起来相对...

2457
来自专栏Crossin的编程教室

【每周一坑】生成九宫格图片

非常简单的功能,但在开发中很常见,很多网页/应用里缩略图都是对图片进行缩放+切割得到的。

1393
来自专栏媒矿工厂

视频编码的GPU加速

前言 随着视频编解码技术的不断发展,视频逐步向着高清晰、高动态、高数据量的方向演进。这对视频编解码终端的计算能力提出了越来越高的要求。同时,在GPU领域,随着C...

6664
来自专栏AI研习社

紧跟未来深度学习框架需求,TensorFlow 推出 Eager Execution

Google 的 TensorFlow 是 AI 学习者中使用率最高、名气也最大的深度学习框架,但由于 TensorFlow 最早是基于 Google 的需求开...

3377
来自专栏吉浦迅科技

为啥在Matlab上用NVIDIA Titan V训练的速度没有GTX1080快?

在Matlab官方论坛上看到这个帖子,希望给大家带来参考 有一天,有人在Matlab的论坛上发出了求救帖: ? 楼主说: 我想要加快我的神经网络训练,所以把G...

5568
来自专栏郭耀华‘s Blog

SmileyFace——基于OpenCV的人脸人眼检测、面部识别程序

项目地址 https://github.com/guoyaohua/SmileyFace 开发环境 Visual Studio 2010 MFC + OpenC...

3835
来自专栏智能算法

数据异常到底该如何检测?(一)

小编在正式进入工作之后,面对的第一个需要去解决的问题:在网络安全监测中,如何发现异常数据?如异常用户登录,异常操作等。对于网络上的问题我确实是第一次接触这样类型...

7447
来自专栏CSDN技术头条

基于OpenGL ES的深度学习框架编写

背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框...

4388

扫码关注云+社区

领取腾讯云代金券