科学计算库学习报告

科学计算需要用到numpy和matplotlib

一、numpy库介绍

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

 

 

 

 二、numpy库的安装和引入

使用pip工具安装:

python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose

引入numpy:

import numpy as np   #引用numpy库,在程序的后续部分中用np代替numpy。

三、NumPy Ndarray 对象

(1)numpy常用的创建数组函数

 

 

 

(2)ndarray类的常用属性

 

 

 实例

import numpy as np

a=np.ones((4,5))

b=a.ndim

c=a.shape

d=a.dtype

print(a,b,c,d)

输出结果

[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]] 2 (4, 5) float64

(3)ndarray类的形态操作方法

 

(4)ndarray类的索引和切片方法

 

 

 实例

import numpy as np

a=np.random.rand(5,3)#生成5x3的数组,用随机数填充
a[2] #获得第二行数据
Out[34]: array([0.45159542, 0.20082672, 0.44729717])
a[1:3]
Out[35]: 
array([[0.54773734, 0.22109951, 0.74633353],
       [0.45159542, 0.20082672, 0.44729717]])
a[-5:-2:2]
Out[36]: 
array([[0.1701134 , 0.97661781, 0.2449302 ],
       [0.45159542, 0.20082672, 0.44729717]])

(5)numpy库的算数运算函数

 

 

 (6)numpy库的比较函数

其将返回 一个布尔数组,它包含两个数组中对应元素值的比较结果,例:

(7)numpy库的其他函数

函数 描述
np.abs(x) 计算基于元素的整型、浮点型、复数的绝对值
np.sqrt(x) 计算每个元素的平方根
np.squre(x) 计算每个元素的平方
np.ceil(x) 计算大于或等于每个元素的最小值
np.floor(x) 计算小于或等于每个元素的最大值
np.rint(x[,out]) 取每个元素最近的整数并保留数据类型

np.sin/np.cos/np.tan(x*np.pi/180)

利用*np.pi/180转化为弧度,

求每个元素的正弦值/余弦值/正切值

np.sign(x) 计算每个元素的符号:1(+),0,-1(-)
np.exp(x,[,out])

计算每个元素的e**x

np.log(x),np.log10(x),np.log2(x)

计算对数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 二、matplotlib库 —— 提供数据绘画功能的第三方库

其pyplot子库主要用于实现各种数据展示图形的绘制,提供了一批操作和绘图函数,每个函数代表对图像进行的一个操作。

引用方式: >>>import matplotlib.pyplot as plt, 在后续程序中用plt代替matplotlib.pyplot。

matplotlib.pyplot库的函数,比如创建绘图区域、添加标注或者修改坐标轴等,这些函数采用plt.<b>(),其中<b>是具体函数名称

1.plt库的绘图区域函数

函数 描述
plt.figure(figsize=(width,height),facecolor=None)

创建一个全局绘图区域,使其成为当前的绘图对象,

figsize参数可以指定绘图区域的宽度和高度,单位为英寸。

plt.sublot(nrows,ncols,plot_number)

在全局绘图区域内创建子绘图区域,其参数将全局绘图区域

分成nrows行和ncols列,并在plot_number区域生成一个坐标系。

plt.axes(rect,axisbg = 'w')

创建一个坐标系风格的子绘图区域,参数rect=[left,bottom,width,height]

中四个变量的范围为(0,1);axisbg指背景色,默认为white。

plt.subplots_adjust()

调整子绘图区域的布局

 2.plt库的读取和显示函数

 

 3.plt库的基础图表函数

操作 描述

plt.polt(x,y,label,color,linewidth)

根据x,y数组绘制直\曲线;

label表示设置标签并在图例(legend)中显示;

color表示曲线颜色,linewidth表示曲线宽度。

plt.boxplot(data,notch,position) 绘制一个箱型图(Box-plot)
plt.bar(left,height,width,bottom) 绘制一个条形图
plt.barh(bottom,width,height,left) 绘制一个横向条形图
plt.polar(theta,r) 绘制极坐标图
plt.pie(data,explode) 绘制饼图
plt.psd(x,NFFT=256,pad_to,Fs) 绘制功率谱密度图
plt.specgram(x,NFFT=256,pay_to,F) 绘制谱图
plt.cohere(x,y,NFFT=256,Fs) 绘制X—Y的相关函数
plt.scatter() 绘制散点图
plt.step(x,y,where)

绘制步阶图

plt.hist(x,bins,normed) 绘制直方图
plt.contour(X,Y,Z,N) 绘制等值图
plt.vlines() 绘制垂直图
plt.stem(x,y,linefmt,markerfmt,basefmt) 绘制曲线每个点到水平轴线的垂线
plt.plot_date() 绘制数据日期
plt.plotfile() 绘制数据后写入文件

实例

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,6,100)
y=np.cos(2*np.pi*x)*np.exp(-x)+0.8
plt.plot(x,y,'k',color='r',linewidth=3,linestyle="-")
plt.show()

结果

 

 plt库的坐标轴

(1)plt库的坐标轴设置函数

 

 (2)plt库的标签设置函数

 

 

 

 实例

import numpy as np 
from matplotlib import pyplot as plt 
x = np.arange(1,11) 
y =  2  * x +  5 
plt.title("坐标系标题")
plt.xlabel('时间(s)')
plt.ylabel('范围(m)')
plt.plot(x,y)
plt.show()

结果

 三、雷达图绘制 —— 2019310143147

代码:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
  
name = [' 第一周作业',' 第二周作业','第三周作业','第四周作业','第五周作业','第六周作业']   #标签
theta = np.linspace(0,2*np.pi,len(name),endpoint=False)    #将圆根据标签的个数等比分
value = [100,100,100,100,90,100]
theta = np.concatenate((theta,[theta[0]]))  #闭合
value = np.concatenate((value,[value[0]]))  #闭合
  
ax = plt.subplot(111,projection = 'polar')      #构建图例
ax.plot(theta,value,'m-',lw=1,alpha = 0.75)    #绘图
ax.fill(theta,value,'m',alpha = 0.75)           #填充
ax.set_thetagrids(theta*180/np.pi,name)         #替换标签
ax.set_ylim(0,100)                          #设置极轴的区间
ax.set_theta_zero_location('N')         #设置极轴方向
ax.set_title('ruan的成绩表',fontsize = 25)   #添加图标题
plt.show()

结果:

四、手绘图片实例

from PIL import Image
import numpy as np
vec_el = np.pi/2.2
vec_az = np.pi/4
depth=10.
im=Image.open(r'D:\d.jpg').convert('L')
a=np.asarray(im).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)
dy=np.cos(vec_el)*np.sin(vec_az)
dz=np.sin(vec_el)
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A
a2=255*(dx*uni_x+dy*uni_y+dz*uni_z)
a2=a2.clip(0,255)
im2=Image.fromarray(a2.astype('uint8'))
im2.save(r'D:\dd.jpg')

结果:

 

 

posted @ 2020-05-06 22:42  软锰矿  阅读(226)  评论(0编辑  收藏  举报