科学计算与可视化

一.numpy库

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵(matrix))。

一个用python实现的科学计算,包括:

1、一个强大的N维数组对象Array;

2、比较成熟的(广播)函数库;

3、用于整合C/C++和Fortran代码的工具包;

4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。

二.matplotlib库

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。

Matplotlib基础知识:
1.Matplotlib中的基本图表包括的元素:
   x轴和y轴
   水平和垂直的轴线
   x轴和y轴刻度
   刻度标示坐标轴的分隔,包括最小刻度和最大刻度
   x轴和y轴刻度标签
   表示特定坐标轴的值
   绘图区域
   实际绘图的区域
2.hold属性
  hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。但是目前不推荐去动hold这个属性,这种做法(会有警告)。因此使用默认设置即可。
3.网格线
  grid方法:
    使用grid方法为图添加网格线
    设置grid参数(参数与plot函数相同)
    .lw代表linewidth,线的粗细
    .alpha表示线的明暗程度
4.axis方法
  如果axis方法没有任何参数,则返回当前坐标轴的上下限
 
实例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif']=['SimHei']
labels = np.array(['','','','','',''])
number = 6
data = np.array([80,110,100,20,110,70])
angles = np.linspace(0,2*np.pi,number,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.title('Python123成绩表')
plt.plot(angles,data,'bo-',color='red',linewidth=3)
plt.fill(angles,data,facecolor='blue',alpha=0.7)
plt.thetagrids(angles*180/np.pi,labels)
plt.figtext(0.70,0.95,'学号:2019310143027')
plt.grid(True)
plt.show()
View Code

 

import numpy as np
import matplotlib
import scipy.stats
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

if __name__ == "__main__":
    mu, sigma, num_bins = 0, 1, 400
    x = mu + sigma * np.random.randn(10000)
    n, bins, patches = plt.hist(x, num_bins, density=True, facecolor='green', alpha=0.5)
    y = scipy.stats.norm.pdf(bins, mu, sigma)
    plt.plot(bins, y, 'r--')
    plt.xlabel('Expectation')
    plt.ylabel('Probability')
    plt.title('histogram of normal distribution: $\mu = 0$, $\sigma=1$')
    plt.subplots_adjust(left=0.15) 
    plt.grid(True)  
    plt.show()
View Code

 

 

from PIL import Image
import numpy as np
 
a = np.asarray(Image.open(r"C:\Users\12710\Pictures\Saved Pictures\shiyan.jpg").convert('L')).astype('float')
 
depth = 10.                     
grad = np.gradient(a)                      
grad_x, grad_y = grad           
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.

A = np.sqrt(grad_x**2 + grad_y**2 + 1.)  
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
 
vec_el = np.pi/2.2              
vec_az = np.pi/4. 
                 
dx = np.cos(vec_el)*np.cos(vec_az) 
dy = np.cos(vec_el)*np.sin(vec_az)  
dz = np.sin(vec_el)
 
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) 
b = b.clip(0,255)
 
im = Image.fromarray(b.astype('uint8'))     
im.save(r"C:\Users\12710\Pictures\Saved Pictures\shiuyan1.jpg")
View Code

posted @ 2020-05-06 22:42  ikome  阅读(175)  评论(0)    收藏  举报