数据分析与科学计算可视化-----用于科学计算的numpy库与可视化工具matplotlib
一、numpy库与matplotlib库的基本介绍
1.安装
(1)通过pip安装:
>> pip install matplotlib

安装完成
安装matplotlib的方式和numpy很像,下面不再介绍。
2.作用
(1)numpy:科学计算包,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成,并可与C++/Fortran语言无缝结合。树莓派Python v3默认安装已经包含了numpy。
numPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
(2)
matplotlib: 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,可以绘制多种形式的图形,包括线图、直方图、饼状图、散点图、误差线图等等并且提供多样化的输出格式。是数据可视化的重要工具。
二、扩展库numpy的简介
导入模块 >>> import numpy as np
生成数组
>>> np.array([1, 2, 3, 4, 5]) # 把列表转换为数组
array([1, 2, 3, 4, 5])
>>> np.array((1, 2, 3, 4, 5)) # 把元组转换成数组
array([1, 2, 3, 4, 5])
>>> np.array(range(5)) # 把range对象转换成数组
array([0, 1, 2, 3, 4])
>>> np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
array([[1, 2, 3],
[4, 5, 6]])
>>> np.arange(8) # 类似于内置函数range()
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> np.arange(1, 10, 2)
array([1, 3, 5, 7, 9])
生成各种各样的矩阵或数组,下面不再介绍
数组与数值的运算 >>> x = np.array((1, 2, 3, 4, 5)) # 创建数组对象
>>> x
array([1, 2, 3, 4, 5])
>>> x * 2 # 数组与数值相乘,返回新数组
array([ 2, 4, 6, 8, 10])
>>> x / 2 # 数组与数值相除
array([ 0.5, 1. , 1.5, 2. , 2.5])
>>> x // 2 # 数组与数值整除
array([0, 1, 1, 2, 2], dtype=int32)
>>> x ** 3 # 幂运算
array([1, 8, 27, 64, 125], dtype=int32)
>>> x + 2 # 数组与数值相加
array([3, 4, 5, 6, 7])
>>> x % 3 # 余数
array([1, 2, 0, 1, 2], dtype=int32)
>>> 2 ** x
array([2, 4, 8, 16, 32], dtype=int32)
>>> 2 / x
array([2. ,1. ,0.66666667, 0.5, 0.4])
>>> 63 // x
array([63, 31, 21, 15, 12], dtype=int32)
数组与数组的运算 >>> a = np.array((1, 2, 3))
>>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))
>>> c = a * b # 数组与数组相乘
>>> c # a中的每个元素乘以b中的对应列元素
array([[ 1, 4, 9],
[ 4, 10, 18],
[ 7, 16, 27]])
>>> c / b # 数组之间的除法运算
array([[ 1., 2., 3.],
[ 1., 2., 3.],
[ 1., 2., 3.]])
>>> c / a
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
>>> a + a # 数组之间的加法运算
array([2, 4, 6])
>>> a * a # 数组之间的乘法运算
array([1, 4, 9])
>>> a - a # 数组之间的减法运算
array([0, 0, 0])
>>> a / a # 数组之间的除法运算
array([ 1., 1., 1.])
转置
>>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b.T # 转置
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
参考资料:http://www.runoob.com/numpy/numpy-matplotlib.html
三、matplotlib库的简介
matplotlib中最基础的模块是pyplot
因为matplotlib库源于matlab,其操作基本如matlab的操作,以下用绘制一个函数的例子介绍matplotlib库。
import numpy as np
import matplotlib.pyplot as plt X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C,S = np.cos(X), np.sin(X) plt.plot(X,C)
plt.plot(X,S) plt.show()

效果如下。
参考资料:http://www.runoob.com/w3cnote/matplotlib-tutorial.html
四、绘制雷达图
代码实现:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei' # 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体 labels = np.array(['发育','死亡','击杀','助攻','团战','出装']) # 设置标签
datas = np.array([5, 2, 9, 13, 11, 7]) # 设置数据
angles = np.linspace(0, 2*np.pi, 6, endpoint = False) # 设置角度
datas = np.concatenate((datas, [datas[0]]))
angles = np.concatenate((angles, [angles[0]]))
fig = plt.figure(facecolor = 'white') # 创建绘图区域
plt.subplot(111, polar = True) # 极坐标
plt.plot(angles, datas, 'bo-', color = 'g', linewidth = 1) # 画图
plt.fill(angles, datas, facecolor = 'g', alpha = 0.25) # 填充
plt.thetagrids(angles*180/np.pi, labels) # 设置极坐标的位置
plt.figtext(0.52, 0.95, '28-lie', ha = 'center') # 设置标题
plt.grid(True) # 打开网格线
plt.show() # 展示图片
五、此处展示PIL制作手绘风格
1.手绘图像的基本思想是利用像素之间的梯度值重构每个像素值,为了体现光照效果,设计一个光源,建立光源对个点梯度值的影响函数,进而运算出新的像素值,从而体现边界点灰度变化,形成手绘效果。
2.代码实现
from PIL import Image
import numpy as np
vec_el = np.pi/2.2 # 光源的俯视角度,弧度值
vec_az = np.pi/4. # 光源的方位角度,弧度值
depth = 10. # (0-100)
im = Image.open(r'C:\Users\80939\Desktop\tiantan.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) #光源对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
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'C:\Users\80939\Desktop\tiantan1.jpg')
3.效果对比

数据分析与科学计算可视化-----用于科学计算的numpy库与可视化工具matplotlib的更多相关文章
- Anaconda 用于科学计算的 Python 发行版
用于科学计算的 Python 发行版: 1.Anaconda https://www.continuum.io/ 公司continuum. 有商业版本. Anaconda is the le ...
- 科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解)
一:TVTK的管线 使用管线技术将TVTK中各个对象穿连起来,几乎所有渲染引擎都会提到管线技术 在TVTK中,每个对象只需要实现相对简单的任务,整个管线则能根据用户的需求,实现复杂的数据可视化处理. ...
- 为什么GPU可以用于科学计算【转载】
转自:https://blog.csdn.net/xihuanyuye/article/details/81178352 https://www.zhihu.com/question/35063258 ...
- 科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)
Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...
- Python的工具包[0] -> numpy科学计算 -> numpy 库及使用总结
NumPy 目录 关于 numpy numpy 库 numpy 基本操作 numpy 复制操作 numpy 计算 numpy 常用函数 1 关于numpy / About numpy NumPy系统是 ...
- Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV
Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV – lxw的大数据田地 http://lxw1234.com/archives/2015/09/516.htm Java使用极小 ...
- echo $[1 + 2] shell中 $[] 在bash中同$(()),用于算术计算
shell脚本编写:echo $[ 11#8+1] 输出结果是几,为什么,怎么算来的? 摘自:https://zhidao.baidu.com/question/334766451.html 结 ...
- Oracle计算连续天数,计算连续时间,Oracle连续天数统计
Oracle计算连续天数,计算连续时间,Oracle连续天数统计 >>>>>>>>>>>>>>>>> ...
- CyclicBarrier开启多个线程进行计算,最后统计计算结果
有一个大小为50000的数组,要求开启5个线程分别计算10000个元素的和,然后累加得到总和 /** * 开启5个线程进行计算,最后所有的线程都计算完了再统计计算结果 */ public class ...
随机推荐
- 学习笔记CB014:TensorFlow seq2seq模型步步进阶
神经网络.<Make Your Own Neural Network>,用非常通俗易懂描述讲解人工神经网络原理用代码实现,试验效果非常好. 循环神经网络和LSTM.Christopher ...
- 经典问题----最短路径(Floyd弗洛伊德算法)(HDU2066)
问题简介: 给定T条路,S个起点,D个终点,求最短的起点到终点的距离. 思路简介: 弗洛伊德算法即先以a作为中转点,再以a.b作为中转点,直到所有的点都做过中转点,求得所有点到其他点的最短路径,Flo ...
- 使用VMWare虚拟机打开MFC报错:不支持16位系统
可能这个问题的比较小众,但还是提供一下自己的思路. 笔者使用的是VMWare Fusion11的版本,采用windows7sp1的虚拟机. 在打开Mac系统共享过来的VC++的MFC文件运行时报错:不 ...
- 2D游戏与3D游戏的区别 原文:https://zhidao.baidu.com/question/588490865.html
2D和3D间有哪些不同点呢? 让我们来比较一下,共同找出它俩之间的不同点. 对玩家来说,2D技术和3D技术只是显示数据的方式而已,玩家都是通过二 维的平面显示器来观看它们.对制作者来说,二者的不同之处 ...
- Java(原码、反码、补码和计算机存储格式)
原码:将一个整数,转换成二进制,就是其原码.如单字节的5的原码为:0000 0101:-5的原码为1000 0101. 反码:正数的反码就是其原码:负数的反码是将原码中,除符号位以外,每一位取反.如单 ...
- 在经过身份验证的服务中不支持跨域 javascript 回调
在 asp.net web forms 站点中做了一个 wcf restful service 接口,开启了webforms 身份认证. 当 webforms 站点用户登录之后,访问 restful ...
- layui 表格组件不能访问连续的属性的解决办法
table.js里第741行改成这样,它这里只能访问一级属性// var content = item1[field]; 不能访问对象内的对象,比如item1.depart.name,只能访问一级属性 ...
- 友善RK3399/NanoPC-T4开发板wiringPi Python库访问GPIO外设实例讲解 -【申嵌视频】
1 wiringPi for Python简介 wiringPi for Python是wiringPi的Python语言扩展,用于在Python程序中操作GPIO/I2C/SPI库/UART/PWM ...
- win7和linux下利用命令查看文件md5、sha1、sha256
win7 certutil -hashfile <filename> MD5 certutil -hashfile <filename> SHA1 certutil -hash ...
- Jquery 扩展方法实现原理
JSONP原理 首先:JSON和JSONP是不一样的概念. JSON是一种数据交换格式,而JSONP是非正式传输协议. 该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回 ...
