科学计算和可视化

一、Numpy库

Numpy是什么

numpy很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。

数组常用函数

1.where() 
按条件返回数组的索引值 
2.take(a,index) 
从数组a中按照索引index取值 
3.linspace(a,b,N) 
返回一个在(a,b)范围内均匀分布的数组,元素个数为N个 
4.a.fill() 
将数组的所有元素以指定的值填充 
5.diff(a) 
返回数组a相邻元素的差值构成的数组 
6.sign(a) 
返回数组a的每个元素的正负符号 
7.piecewise(a,[condlist],[funclist]) 
数组a根据布尔型条件condlist返回对应元素结果 
8.a.argmax(),a.argmin() 
返回a最大、最小元素的索引

改变数组维度

a.ravel(),a.flatten(): 
将数组a展平成一维数组
a.shape=(m,n),a.reshape(m,n): 
将数组a转换成m*n维数组 
3.a.transpose,a.T 
转置数组a

数组组合

1.hstack((a,b)),concatenate((a,b),axis=1) 
将数组a,b沿水平方向组合 
2.vstack((a,b)),concatenate((a,b),axis=0) 
将数组a,b沿竖直方向组合 
3.row_stack((a,b)) 
将数组a,b按行方向组合 
4.column_stack((a,b)) 
将数组a,b按列方向组合

数组分割

1.split(a,n,axis=0),vsplit(a,n) 
将数组a沿垂直方向分割成n个数组 
2.split(a,n,axis=1),hsplit(a,n) 
将数组a沿水平方向分割成n个数组

数组修剪和压缩

1.a.clip(m,n) 
设置数组a的范围为(m,n),数组中大于n的元素设定为n,小于m的元素设定为m 
2.a.compress() 
返回根据给定条件筛选后的数组

数组属性

1.a.dtype 
数组a的数据类型 
2.a.shape 
数组a的维度 
3.a.ndim 
数组a的维数 
4.a.size 
数组a所含元素的总个数 
5.a.itemsize 
数组a的元素在内存中所占的字节数 
6.a.nbytes 
整个数组a所占的内存空间 
7.a.astype(int) 
转换a数组的类型为int型

数组计算

1.average(a,weights=v) 
对数组a以权重v进行加权平均 
2.mean(a),max(a),min(a),middle(a),var(a),std(a) 
数组a的均值、最大值、最小值、中位数、方差、标准差 
3.a.prod() 
数组a的所有元素的乘积 
4.a.cumprod() 
数组a的元素的累积乘积 
5.cov(a,b),corrcoef(a,b) 
数组a和b的协方差、相关系数 
6.a.diagonal() 
查看矩阵a对角线上的元素 
7.a.trace() 
计算矩阵a的迹,即对角线元素之和

二、matplotlib库

 

一般函数
plt.savefig(‘test’, dpi = 600) :将绘制的图画保存成png格式,命名为 test

 

plt.ylabel(‘Grade’) : y轴的名称

 

plt.axis([-1, 10, 0, 6]) : x轴起始于-1,终止于10 ,y轴起始于0,终止于6

 

plt.subplot(3,2,4) : 分成3行2列,共6个绘图区域,在第4个区域绘图。排序为行优先。也可 plt.subplot(324),将逗号省略。

 

.plot函数
plt.plot(x, y, format_string, **kwargs):

 

x为x轴数据,可为列表或数组;
y同理;
format_string 为控制曲线的格式字符串;
**kwargs 第二组或更多的(x, y, format_string)
format_string: 由 颜色字符、风格字符和标记字符组成。

 

颜色字符:‘b’蓝色 ;‘#008000’RGB某颜色;‘0.8’灰度值字符串
风格字符:‘-’实线;‘–’破折线; ‘-.’点划线; ‘:’虚线 ; ‘’‘’无线条
标记字符:‘.’点标记 ‘o’ 实心圈 ‘v’倒三角 ‘^’上三角
eg: plt.plot(a, a1.5, ‘go-’, a, a2, ‘*’) 第二条无曲线,只有点

 

.plot 显示中文字符
pyplot默认并不支持中文显示,需要 rcParams 修改字体来实现

 

rcParams的属性:

 

‘font.family’ 用于显示字体的名字
‘font.style’ 字体风格,正常’normal’ 或斜体’italic’
‘font.size’ 字体大小,整数字号或者’large’ ‘x-small’

plt子绘图区域
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1):设定网格,选中网格,确定选中行列区域数量,编号从0开始。

 

eg:

 

plt.subplot2grid((3, 3), (1, 0), colspan = 2) , (3,3)表示分为3行3列,(1,0)表示选中第1行,第0列的区域进行绘图,colspan=2表示在选中区域的延伸。

 

Plot的图表函数
plt.plot(x,y , fmt) :绘制坐标图
plt.boxplot(data, notch, position): 绘制箱形图
plt.bar(left, height, width, bottom) : 绘制条形图
plt.barh(width, bottom, left, height) : 绘制横向条形图
plt.polar(theta, r) : 绘制极坐标图
plt.pie(data, explode) : 绘制饼图
plt.scatter(x, y) :绘制散点图
plt.hist(x, bings, normed) : 绘制直方图

三、应用

(1)绘制雷达图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 显示中文
labels = np.array([u'第一周', u'第二周', u'第三周',u'第四周',u'第五周',u'第六周']) # 标签
dataLenth = 6  # 数据长度
data_radar = np.array([100,90.9,100,80,100,90]) # 数据
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)  # 分割圆周长
data_radar = np.concatenate((data_radar, [data_radar[0]]))  # 闭合
angles = np.concatenate((angles, [angles[0]]))  # 闭合
plt.polar(angles, data_radar, 'bo-', linewidth=1)  # 做极坐标系
plt.thetagrids(angles * 180/np.pi, labels)  # 做标签
plt.fill(angles, data_radar, facecolor='r', alpha=0.25)# 填充
plt.ylim(0, 100)
plt.title(u'林崇宇的成绩表')
plt.show()

(2)将图片处理成手绘风

from PIL import Image
import numpy as np
vec_el=np.pi/3.2
vec_az=np.pi/3.
depth=20.
im=Image.open('D:\\1.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('2.jpg')

  

(3)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='KaiTi'
matplotlib.rcParams['font.sans-serif']=['KaiTi']
x=np.linspace(0, 2*np.pi, 500)            # 创建自变量数组
y1=np.sin(x)                             # 创建函数值数组
y2=np.cos(x)
y3=np.sin(x*x)
plt.figure(1)                              # 创建图形
ax1=plt.subplot(2,2,1)                   # 第一行第一列图形
ax2=plt.subplot(2,2,2)
ax3=plt.subplot(212, facecolor='y')       # 第一行第二列图形      # 第二行
plt.sca(ax1)                               # 选择ax1
plt.plot(x,y1,color='red')                 # 绘制红色曲线
plt.ylim(-1.2,1.2)                         # 限制y坐标轴范围
plt.sca(ax2)                               # 选择ax2
plt.plot(x,y2,'b--')                       # 绘制蓝色曲线
plt.ylim(-1.2,1.2)
plt.sca(ax3)                               # 选择ax3
plt.plot(x,y3,'g--')
plt.ylim(-1.2,1.2)
plt.title('林崇宇')
plt.show()

转载于:https://www.cnblogs.com/Coylin/p/10745290.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值