科学计算和可视化

一、numpy的学习笔记

(1)简介

 

Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:

①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。

②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。

③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。

④线性代数、随机数生成以及傅里叶变换功能。

⑤用于集成由C、C++、Fortran等语言编写的代码的工具

⑥导入Numpy 1 import numpy as np 

(2)创建数组

函数 描述
np.array([x,y,z],dtype=int) 从Python列表和元组创造数组
np.arange(x,y,i) 创建一个由x到y,以i为步长的数组
np.linspace(x,y,n) 创建一个由x到y,等分成n个元素的数组
np.indices((m,n)) 创建一个m行n列的随机数组
np.random.rand(m,n) 创建一个m行n列的随机数组
np.ones((m,n),dtype) 创建一个m行n列全1的数组,dtype是数据类型
np.empty((m,n),dtype) 创建一个m行n列全0的数组,dtype是数据类型

 

 

 

 

 

 

 

 

 

 

(3)数据类型

名称 描述
bool_ 布尔型数据类型(True 或者 False)
int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc 与 C 的 int 类型一样,一般是 int32 或 int 64
intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 字节(-128 to 127)
int16 整数(-32768 to 32767)
int32 整数(-2147483648 to 2147483647)
int64 整数(-9223372036854775808 to 9223372036854775807)
uint8 无符号整数(0 to 255)
uint16 无符号整数(0 to 65535)
uint32 无符号整数(0 to 4294967295)
uint64 无符号整数(0 to 18446744073709551615)
float_ float64 类型的简写
float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ complex128 类型的简写,即 128 位复数
complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(4)基本的索引与切片

 1 arr=np.arange(10)arr[5]    #索引第6个元素
 2 arr[5:8]    #索引第6到第9个元素作为数组
 3 arr[5:8]=12    #令第6到第9个元素等于12
 4 arr_slice=arr[5:8]    #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组
 5 arr_slice[:]=64    #将数组切片的全部元素改为64
 6 arr[5:8].copy()    #得到数组切片的一份副本
 7 arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
 8 arr2d[2]    #索引二维数组第3行
 9 arr2d[0][2]  arr2d[0,2]    #等价索引1行3列元素
10 arr2d[:2]    #索引第1行和第2行(不含第3行)
11 arr2d[:,:1]    #索引第1列
12 arr2d[:-2]    #使用负数索引将从尾部开始选取行

二、matplotlib学习笔记

(1)简介

Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。

  • 强烈建议看看的matplotlib学习网站:https://matplotlib.org/  里面什么形状的图都有,都是很多大神的智慧结晶,虽然我大部分代码都看不懂,但是看图真的赏心悦目,强推!!

(2)选取一些图形(参考菜鸟教程)

①条形图

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 
 4 n = 12
 5 X = np.arange(n)
 6 Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
 7 Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
 8 
 9 plt.axes([0.025,0.025,0.95,0.95])
10 plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
11 plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
12 
13 for x,y in zip(X,Y1):
14     plt.text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom')
15 
16 for x,y in zip(X,Y2):
17     plt.text(x+0.4, -y-0.05, '%.2f' % y, ha='center', va= 'top')
18 
19 plt.xlim(-.5,n), plt.xticks([])
20 plt.ylim(-1.25,+1.25), plt.yticks([])
21 
22 # savefig('../figures/bar_ex.png', dpi=48)
23 plt.show()

科学计算和可视化

 

 ②散点图

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 
 4 n = 1024
 5 X = np.random.normal(0,1,n)
 6 Y = np.random.normal(0,1,n)
 7 T = np.arctan2(Y,X)
 8 
 9 plt.axes([0.025,0.025,0.95,0.95])
10 plt.scatter(X,Y, s=75, c=T, alpha=.5)
11 
12 plt.xlim(-1.5,1.5), plt.xticks([])
13 plt.ylim(-1.5,1.5), plt.yticks([])
14 # savefig('../figures/scatter_ex.png',dpi=48)
15 plt.show()

科学计算和可视化

 

 三、将python123作业成绩化成雷达图

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 import matplotlib
 4 matplotlib.rcParams['font.family']='SimHei'
 5 matplotlib.rcParams['font.sans-serif']=['SimHei']
 6 labels = np.array(['第一','第二','第三','第四','第五','第六'])
 7 number = 6
 8 data = np.array([80,110,100,100,110,80])#数据值
 9 angles = np.linspace(0,2*np.pi,number,endpoint=False)
10 data = np.concatenate((data,[data[0]]))#连接data和data[0]
11 angles = np.concatenate((angles,[angles[0]]))#连接angles和angles[0]
12 fig = plt.figure(facecolor="white")#创建一个全局绘图区域
13 plt.subplot(111,polar=True)
14 plt.title('Python123成绩表(单位:单元)')
15 plt.plot(angles,data,'bo-',color='r',linewidth=2)
16 plt.fill(angles,data,facecolor='b',alpha=0.8)
17 plt.thetagrids(angles*180/np.pi,labels)#在各个angles的位置上标记上对应的labels
18 plt.figtext(0.72,0.95,'学号:2019310143024')#为全局绘图区添加文字
19 plt.grid(True)
20 plt.show()

科学计算和可视化

四、python手绘图

 

 1 from PIL import Image
 2 import numpy as np
 3  
 4 a = np.asarray(Image.open(r"C:\Users\86136\Pictures\like\heiboy.jpg").convert('L')).astype('float')
 5  
 6 depth = 10.                     
 7 grad = np.gradient(a)                  #梯度值,    
 8 grad_x, grad_y = grad           
 9 grad_x = grad_x*depth/100.       #列梯度值*0.1
10 grad_y = grad_y*depth/100.
11  
12 A = np.sqrt(grad_x**2 + grad_y**2 + 1.)  #相当于grad_z=1
13 uni_x = grad_x/A
14 uni_y = grad_y/A
15 uni_z = 1./A          #梯度归一化
16  
17 vec_el = np.pi/2.2              
18 vec_az = np.pi/4. 
19                  
20 dx = np.cos(vec_el)*np.cos(vec_az) 
21 dy = np.cos(vec_el)*np.sin(vec_az)  
22 dz = np.sin(vec_el)             #长度为1,投影x,y,z长度 
23  
24 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) 
25 b = b.clip(0,255)
26  
27 im = Image.fromarray(b.astype('uint8'))     
28 im.save(r"C:\Users\86136\Pictures\like\heiboy_1.jpg")

 

科学计算和可视化

科学计算和可视化

 

 

 

 

上一篇:pytorch学习笔记(2)


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