科学计算与可视化
Posted gtxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了科学计算与可视化相关的知识,希望对你有一定的参考价值。
(1)numpy以及matplotlib的学习总结及应用
NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了CPython的GIL(全局解释器锁),运行效率极好,是大量机器学习框架的基础库!
NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括:
- 一个强大的N维数组对象ndrray;
- 比较成熟的(广播)函数库;
- 用于整合C/C++和Fortran代码的工具包;
- 实用的线性代数、傅里叶变换和随机数生成函数
Numpy中定义的最重要的对象是成为ndarray的N维数组类型。它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。
ndarray属性:ndim属性,表示维度个数;shape属性,表示各维度大小;dtype属性,表示数据类型。
实例:
import numpy print (‘使用列表生成一维数组‘) data = [1,2,3,4,5] x = numpy.array(data) print(x) print (x.dtype) print(x.ndim) print(x.shape) print (‘使用列表生成二维数组‘) data = [[1,0],[2,0],[3,3]] x = numpy.array(data) print (x) print (x.ndim) print (x.shape)
效果如下:
matplotlib:
概述:matplotlib是基于numpy的一套Python工具包。这个包提供了丰富的数据绘图工具,主要用于绘制一些统计图形。
在代码执行过程中,有两种方式更改参数:
- 使用参数字典(rcParams)
- 调用matplotlib.rc()命令 通过传入关键字元祖,修改参数
如果不想每次使用matplotlib时都在代码部分进行配置,可以修改matplotlib的文件参数。可以用matplot.get_config()
命令来找到当前用户的配置文件目录。
配置文件包括以下配置项:
axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
backend: 设置目标暑促TkAgg和GTKAgg
figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
font: 字体集(font family)、字体大小和样式设置
grid: 设置网格颜色和线性
legend: 设置图例和其中的文本的显示
line: 设置线条(颜色、线型、宽度等)和标记
patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
用来该表线条的属性
线条风格linestyle或ls | 描述 | 线条风格linestyle或ls | 描述 | |
---|---|---|---|---|
‘-‘ | 实线 | ‘:’ | 虚线 | |
‘–’ | 破折线 | ‘None’,’ ‘,’’ | 什么都不画 | |
‘-.’ | 点划线 |
线条标记
标记maker | 描述 | 标记 | 描述 | |
---|---|---|---|---|
‘o’ | 圆圈 | ‘.’ | 点 | |
‘D’ | 菱形 | ‘s’ | 正方形 | |
‘h’ | 六边形1 | ‘*’ | 星号 | |
‘H’ | 六边形2 | ‘d’ | 小菱形 | |
‘_’ | 水平线 | ‘v’ | 一角朝下的三角形 | |
‘8’ | 八边形 | ‘<’ | 一角朝左的三角形 | |
‘p’ | 五边形 | ‘>’ | 一角朝右的三角形 | |
‘,’ | 像素 | ‘^’ | 一角朝上的三角形 | |
‘+’ | 加号 | ‘ | ‘ | 竖线 |
‘None’,’’,’ ‘ | 无 | ‘x’ | X |
(2)成绩雷达图:
import matplotlib.pyplot as plt import numpy as np import matplotlib plt.rcParams[‘font.family‘]=‘SimHei‘ labels=np.array([‘总成绩‘,‘单选‘,‘程序题‘,‘剩余用时‘,‘复写率‘]) nAttr=5 data=np.array([9.5,9,10,6,9]) angles=np.linspace(0,2*np.pi,nAttr,endpoint=False) data=np.concatenate((data,[data[0]])) angles=np.concatenate((angles,[angles[0]])) fig=plt.figure(facecolor=‘white‘) plt.subplot(111,polar=True) plt.plot(angles,data,‘b*-‘,color=‘y‘,linewidth=3) plt.fill(angles,data,facecolor=‘g‘,alpha=0.25) plt.thetagrids(angles*180/np.pi,labels) plt.figtext(0.52,0.95,‘python的成绩表‘,ha=‘center‘) plt.grid(True) plt.savefig(‘scorce_radar.JPG‘) plt.show()
效果:
四.自定义手绘风
代码如下:
# -*- coding:utf-8 -*- import numpy as np from PIL import Image class picture: def __init__ (self,position): self.position = position def Hand_drawn_style(self): vec_el = np.pi/2 # 光源的俯视角度,弧度值 vec_az = np.pi/3 # 光源的方位角度,弧度值 depth = 6 # 深度权值,值越小背景区域越接近白色,值越大背景区域越接近黑色 im = Image.open(self.position).convert(‘L‘) # 打开图像并转变为灰度模式 a = np.asarray(im).astype(‘float‘) grad = np.gradient(a) # 取图像灰度的梯度值 grad_x, grad_y = grad # 分别取图像的横纵梯度值 grad_x = grad_x * depth / 100. grad_y = grad_y * depth / 100. dx = np.cos(vec_el) * np.cos(vec_az) # 光源对x轴的影响 dy = np.cos(vec_el) * np.sin(vec_az) # 光源对y轴的影响 dz = np.sin(vec_el) # 光源对z轴的影响 A = np.sqrt(grad_x**2 + grad_y**2 + 1.) uni_x = grad_x/A uni_y = grad_y/A uni_z = 1./A a2 = 255*(dx * uni_x + dy * uni_y + dz * uni_z) # 光源归一化 a2 = a2.clip(0, 255) # 预防溢出 im2 = Image.fromarray(a2.astype(‘uint8‘)) # 重构图像 im2.save(‘4d0424dd81_.jpg‘) # 保存图像 im2.show() # 显示图像 if __name__ ==‘__main__‘: position = ‘4d0424dd81.jpg‘ picture(position).Hand_drawn_style()
以上是关于科学计算与可视化的主要内容,如果未能解决你的问题,请参考以下文章