科学计算与可视化

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()

以上是关于科学计算与可视化的主要内容,如果未能解决你的问题,请参考以下文章

科学计算和可视化

科学计算和可视化

科学计算与可视化

科学计算与可视化

科学计算与可视化

科学计算与可视化