科学计算库报告

(一)Numpy+Matplotlib学习笔记
1、Numpy基础
数组

1.Numpy中的数组是ndarray 类实例化的对象。

其中包括:

实际的数据:数组的内容
元数据:对数组的描述(保存数组的长度,数组的…)
大部分对数组的操作仅仅是对元数据的操作,以此提高执行性能

Numpy中的数组必须是同质的,也就是所有的数据类型必须相同

通过基0的下标访问数组中的元素

dtype和shape的属性分别表示元素的类型和维度

实例化

c=np.arange(起始值,终止值,步长):只能用于整数序列

c.arange(起始值,终止值,步长).reshape(2 ,3, 4)

c.ravel()
c.flastten() :赋值一份:
np.array(任何可以被解释为数组的序列

类型类型)

np.astype(目标类型) - > 转换为映射的内存的数据类型
2.数组的维度

数组的维度表示为一个元组,其中的元素按照从高纬度到低纬度的顺序排列
一维数组:一位数组中有6个元素:(6,)
二维数组:两行3列:(2,3)
三维数组:两页三行四列:(2,3,4)
a.ndim : 返回数组的维度长度数值,一维二维还是三维
a.shape : 返回元组表示数组各个维度的长度[[1,2,3],[4,5,6]]-->(2,3)
3.数据类型

内置类型

bool_:True/False
整形:int8/int16/int32/int64,uint8/uint16/uint32/uint64
浮点型:float16/float32/float64
复数:complex64/complex128
字符串:str_
复合类型

由多个相同或不同的字段组合而成的类型

np.array(...,dtype=字符类型)

'''
类型字符码
boll_:?
有符号整型:i1/2/4/8
无符号整型:u1/2/4/8
浮点:f2/4/8
复数:c8/16

c = np.array( [ ('abc',[3,4,5]),('qwe',[1,2,3]) ] ,
dtype={'names':['fa','fb'],'formats':['U3','3i4']})
# dtype类型描述一个字典,names表示取值时的名称。formats表示数据类型
print(b[0]['fa'])
print(b[0]['fb'])
#--------------------------------------------------
d = np.array( [ ('abc',[3,4,5]),('qwe',[1,2,3]) ] ,
dtype={'fa':('U3',0),'fb':('3i4',16)})
# 字典 {名称:(数据类型,指针地址起始位置)}
print(d.itemsize)

切片

数组[start:end:步长,start:end:步长,start:end:步长...]

用法和正常Python切片相同

默认起始:首元素(正步长)/尾(负的步长)

默认终止:尾后/首前

# 普通用法
a = np.arange(1,10)
print(a[:3]) #[1,2,3]

b = np.arange(1,25).reshape(2,3,4)
print(b[:,0,0])
print(b[0,:,:])
print(b[0,...]) # ...表示连续出现的冒号

水平拆分
np.hsplit(被拆数组,拆分份数)
np.split(被拆数组,拆分份数,axis=0)
垂直拆分
np.dsplit(被拆分数组,拆分份数)
ndarray的属性

dtype - 元素的数据属性

shape - 数组的维度

ndim - 数组的维数(len(shape))

size - 数组的元素数,shape中元素相乘

itemsize - 元素的字节数

变维

数组.reshape(新维度),返回数组
就地变维:修改元数据的维度信息,不产生新的数组
数组.shaoe = 新维度
数组.resize(新维度)
2、Matplotlib基础
基本绘图

plot(x,y)

线形、线宽、颜色

plot(..., linestyle = 线形,linewidth=线宽,color=颜色,...)

设置坐标范围

xlim:(水平坐标的最小值,水平坐标的最大值)

ylim:(垂直坐标的最小值,垂直坐标的最大值)

设置坐标刻度

xticks(水平轴的刻度位置[,水平轴刻度文本])
yticks(垂直轴的刻度位置[,垂直轴刻度文本])

设置坐标轴的属性

ax = gca() - 获取当前的坐标轴图
ax.splines[‘left’] - 左纵轴
ax.splines[‘right’] - 右纵轴
ax.splines[‘top’] - 上横轴
ax.splines[‘bottom’] - 下横轴
xx = 任意轴
xx.set_position((坐标系,位置值)) #设置位置
xx.set_color(颜色) # 设置颜色

图形窗口对象

digure(窗口名,figszize=大小,dpi分辨率,dececolor=颜色)

title(窗口标题,fontsize=字体大小)
xlabel(窗口标题,fontsize=字体大小)
ylabel(窗口标题,fontsize=字体大小)

mp.xticks(()) # 去掉刻度值
mp.yticks(()) # 去掉刻度值
mp.text(0.5,0.5,'1',ha ='center',va='center', size=36,alpha=0.5)

mp.subplot(gs[0,:2])
mp.xticks(()) # 去掉刻度值
mp.yticks(()) # 去掉刻度值

mp.show()

生成条形图

bar(水平坐标,绝对高度,相对高度,color=颜色,label=图例标签,alpha=透明度)

饼图

pie(值的数组,间隙数组,标签数组,颜色数组,格式,shadow=是否带阴影,startangle=起始角度)

# 生成矩阵
x,y = np.meshgrid(np.linspace(-3,3,n),np.linspace(-3,3,n)) # 1000宽高的矩阵
# 利用函数生成个图
z1 = np.exp(-x**2 - y**2)
z2 = np.exp(-(x - 1)**2 - (y - 1)**2)
z = (z1 - z2) * 2

#创建图形窗口
mp.figure('Contour',facecolor='lightgray')
mp.gca(projection='polar') # 创建极坐标系

# 设置窗口的标题
mp.title('Contour',fontsize=20)
mp.xlabel(r'$ heta$',fontsize=14)
mp.ylabel(r'$ ho$',fontsize=14)
mp.grid(linestylr=":")

创健三维坐标系

from mpl_toolkits.mplot3d import axes3d

ax = mp.gca(projection='3d') # 变/创建三维坐标系

三维散点

ax.scatter(x,y,z,s=大小.marker=色彩,edgecolor=边缘色,facecolor=填充色,zorder=z顺序)

空间曲面

ax.plot_surface(x坐标矩阵,y坐标矩阵,z坐标矩阵,rstride=行跨距,cstride=列跨距,cmap=颜色映射)
ax.plot_wireframe(x坐标矩阵,y坐标矩阵,z坐标矩阵,rstride=行跨距,linewidth=线宽.color=颜色)
动画

通过连续显示的静态画面生成动画效果

import matplotlib.animation as ma

ma.FubcAnimation(图形窗口,更新函数,interval=间隔)

def fun(...)

(2)python作业成绩的雷达图

每次作业成绩总分:作业2(100),作业3(100),作业3(100),作业4(100),  作业5(100),作业6(70)

本人成绩:作业2(100),作业3(87.5),作业3(100),作业4(100),  作业5(100),作业6(70)

实现画图的代码为如下:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif']=['SimHei']
radar_labels = np.array(['作业2','作业3','作业4','作业5','作业6'])
#数据个数
dataLenth = 5
#数据
data = np.array([100,87.5,100,110,70])

angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
data=np.concatenate((data,[data[0]]))
angles = np.concatenate((angles, [angles[0]]))
fig = plt.figure(facecolor='white')
ax = plt.subplot(111, polar=True)
plt.plot(angles, data, 'bo-',color='b', linewidth=2,alpha=0.4)
plt.plot(angles, data, 'o-',linewidth=1.5,alpha=0.4)
plt.fill(angles,data,facecolor='b',alpha=0.25)
plt.thetagrids(angles * 180/np.pi,radar_labels)
plt.figtext(0.52,0.95,"02豆芽成绩表", ha='center')
plt.grid(True)
plt.show()

执行结果看下图:

(3)pythton自定义手绘风

选取进行手绘的原图

代码如下:


from PIL import Image
import numpy as np
vec_el = np.pi/2.2 # 光源的俯视角度,弧度值
vec_az = np.pi/4. # 光源的方位角度,弧度值
depth = 10. # (0-100)
a =Image.open("shang.png").convert('L')
a=np.asarray(a).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


b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化
b = b.clip(0,255)
im = Image.fromarray(b.astype('uint8')) #重构图像
im.show("shang.jpg")

 

执行效果如下:

(4)python画数学或物理规律

我想用pythton画三角函数

代码look:

import  numpy as np
import matplotlib.pyplot as plt
 
x = np.linspace(-10, 10, 1000)
a = np.sin(x)
b = np.cos(x)
c = np.tan(x)
# d = np.log(x)
 
plt.figure(figsize=(8,4))
plt.plot(x,a,label='$sin(x)$',color='green',linewidth=0.5)
plt.plot(x,b,label='$cos(x)$',color='red',linewidth=0.5)
plt.plot(x,c,label='$tan(x)$',color='blue',linewidth=0.5)
# plt.plot(x,d,label='$log(x)$',color='grey',linewidth=0.5)
 
plt.xlabel('Time(s)')
plt.ylabel('Volt')
plt.title('PyPlot')
plt.xlim(0,10)
plt.ylim(-5,5)
plt.legend()
plt.show()

执行效果看下图:

原文地址:https://www.cnblogs.com/2987831760qq-com/p/10739642.html