一、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")