任务22 科学计算和可视化

 1 from PIL import Image
 2 import numpy as np
 3 
 4 a = np.asarray(Image.open('D:\\python_common_exercise\\exercise\\taylor.jpg').convert('L')).astype('float')
 5 
 6 depth = 10.     #(0-100)
 7 grad = np.gradient(a)       #取图像灰度的梯度值
 8 grad_x, grad_y = grad       #分别取横纵图像的梯度值
 9 grad_x = grad_x*depth/100.
10 grad_y = grad_y*depth/100.
11 A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
12 uni_x = grad_x/A
13 uni_y = grad_y/A
14 uni_z = 1./A
15 
16 vec_el = np.pi/2.2      # 光源的俯视角度,弧度值
17 vec_az = np.pi/4.       # 光源的方位角度,弧度值
18 dx = np.cos(vec_el)*np.cos(vec_az)  #光源对x 轴的影响
19 dy = np.cos(vec_el)*np.sin(vec_az)  #光源对y 轴的影响
20 dz = np.sin(vec_el)                 #光源对z 轴的影响
21 
22 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)    #光源归一化
23 b = b.clip(0,255)
24 
25 im = Image.fromarray(b.astype('uint8')) #重构图像
26 im.save('D:\\python_common_exercise\\exercise\\taylor_2.jpg')

任务22 科学计算和可视化

 

 

任务22 科学计算和可视化

 

 

 

2. numpy 和 matplotlib 笔记 

(1) numpy 

Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素,虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价。

直接看一个例子:

1 #   生成数据 , 保存数据 , 读取保存数据
2 import numpy as np
3 x = np.arange(10)
4 print(x)
5 
6 np.save('save_x', x)
7 np.load('save_x.npy')

 

 1 # 数据形式
 2 import numpy as np
 3 a = np.mat('1,3;5,7')
 4 b = np.mat([[1,2],[3,4]])
 5 print(a)
 6 print(b)
 7 print(type(a))
 8 print(type(b))
 9 
10 c = np.array([[1,3],[4,5]])
11 print(c)
12 print(type(c))
输出:

[[1 3]
[5 7]]
[[1 2]
[3 4]]
<class 'numpy.matrix'>
<class 'numpy.matrix'>
[[1 3]
[4 5]]
<class 'numpy.ndarray'>

 

1 # 保存数据
2 import numpy as np
3 x = np.arange(10)
4 print(x)
5 np.save('save_x', x)
6 
7 #读取数据
8 np.load('save_x.npy')

 

(2)matplotlib

简单画图

import matplotlib.pyplot as plt
x = [0,1,2,3]
y = [0,1,2,3]
plt.plot(x, y)
plt.show()

任务22 科学计算和可视化

 

 

改变颜色和线条形式

import matplotlib.pyplot as plt
x = [0,1,2,3]
y = [0,1,2,3]
plt.plot(x, y,'r--')
plt.show()

任务22 科学计算和可视化

 

 

画多个函数图像

import matplotlib.pyplot as plt
x1 = [0,1,2,3]
y1 = [0,1,2,3]
x2 = [2,4,6,8]
y2 = [4,8,12,16]
plt.plot(x1, y1,'r-',x2,y2,'k--')
plt.show()

任务22 科学计算和可视化

 

 

 

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,50)  # linspace 是划分多少等分
y = x**2 + 3*x + 2
plt.plot(x, y)
plt.show()

任务22 科学计算和可视化

 

 

成绩雷达图

#e19.1DrawDotaRadar.py
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(['综合','第一周','第二周','第三周','第四周','第五周','第六周','第七周'])
nAttr=8
Python=np.array([88.7,85,90,95,93,96,100,98])
angles=np.linspace(0,2*np.pi,nAttr,endpoint=False)
Python=np.concatenate((Python,[Python[0]]))
angles=np.concatenate((angles,[angles[0]]))
fig=plt.figure(facecolor="white")
plt.subplot(111,polar=True)
plt.plot(angles,Python,'bo-',color='g',linewidth=2)
plt.fill(angles,Python,facecolor='g',alpha=0.2)
plt.thetagrids(angles*180/np.pi,labels)
plt.figtext(0.52,0.95,'python成绩分析图',ha='center')
plt.grid(True)
plt.savefig('dota_radar.JPG')
plt.show()

 

任务22 科学计算和可视化

 

上一篇:科学计算和可视化


下一篇:科学计算和可视化