博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
科学计算库学习总结
阅读量:5136 次
发布时间:2019-06-13

本文共 3535 字,大约阅读时间需要 11 分钟。

一.numpy库和matplotlib库的学习

  (1)numpy库介绍:科学计算包,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成,并可与C++/Fortran语言无缝结合

      np.array([1,2,3])列表转换为数组;np.array((1,2,3))元组转换为数组; np.array(range(5))把range对象转换为数组;np.arange(8)类似于内置的range()函数

      np.linspace(0,10,11,endpoint = False)等差数组不包含终点

 

  (2)matplotlib库介绍:是Python编程语言及其数值数学扩展包 的可视化操作界面。它为利用通用的图形用户界面工具包,如Tkinter, wxPython, Qt或GTK+向应用程序嵌入式绘图提供了应用程序接口(API)。此外,matplotlib还有一个基于图像处理库(如开放图形库OpenGL)的pylab接口,其设计与MATLAB非常类似--尽管并不怎么好用。SciPy就是用matplotlib进行图形绘制。

    

 

二.两个库的结合使用实例

# -*- coding: utf-8 -*-"""Spyder EditorThis is a temporary script file."""print("开始")import numpy as npimport matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.family']='SimHei' #设置默认字体matplotlib.rcParams['font.sans-serif']=['SimHei'] #设置默认字体labels = np.array(['第一周','第二周','第三周','第四周','第五周','第六周','第七周']) #nAttr = 7 #边数data = np.array([95,85,90,95,80,85,100]) #数据值angles = np.linspace(0,2*np.pi,nAttr,endpoint=False) #角度设置,0-2PI,分隔7次data = np.concatenate((data,[data[0]]))  #将数据和角度的数组首尾闭合,便于用plot函数绘制angles = np.concatenate((angles,[angles[0]]))fig = plt.figure(facecolor="pink")   #图形外的周边颜色plt.subplot(111,polar=True)    #建立极坐标系的子分区plt.plot(angles,data,'bo-',color='g',linewidth=2) #按照角度和数据画出不规则多边形plt.fill(angles,data,facecolor='g',alpha=0.25)  #填充颜色plt.thetagrids(angles*180/np.pi,labels)  #设置标签例如第X周plt.figtext(0.52,0.95,'14-Kind的成绩图',ha='center') #设置标题plt.grid(True)plt.savefig('dota_radar.JPG')plt.show()

效果图片:

 

三.自定义手绘风

代码如下:

# -*- coding:utf-8 -*-import numpy as npfrom PIL import Imageclass picture:        def __init__ (self,position):        self.position = position    def Hand_drawn_style(self):        vec_el = np.pi/2   # 光源的俯视角度,弧度值        vec_az = np.pi/3    # 光源的方位角度,弧度值        depth = 6          # 深度权值,值越小背景区域越接近白色,值越大背景区域越接近黑色        im = Image.open(self.position).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('4d0424dd81_.jpg') # 保存图像        im2.show()                # 显示图像if __name__ =='__main__':    position = '4d0424dd81.jpg'    picture(position).Hand_drawn_style()

效果图:

 

 

四.正态分布图

代码

import numpy as npimport matplotlibimport scipy.statsmatplotlib.use('TkAgg')import matplotlib.pyplot as pltimport matplotlib.mlab as mlabif __name__ == "__main__":    # 期望0,标准差1,条数50    mu, sigma, num_bins = 0, 1, 500    # 1M个随机数    x = mu + sigma * np.random.randn(10000)    # 正态分布的数据, 颜色的透明度0.5    n, bins, patches = plt.hist(x, num_bins, density=True, facecolor='blue', alpha=0.5)# 直方图函数,x为x轴的值,normed=1表示为概率密度,#即和为一,绿色方块,色深参数0.5.返回n个概率,直方块左边线的x值,及各个方块对象    # 拟合曲线    y = scipy.stats.norm.pdf(bins, mu, sigma)    plt.plot(bins, y, 'r--')    plt.xlabel('Expectation')    plt.ylabel('Probability')    plt.title('histogram of normal distribution: $\mu = 0$, $\sigma=1$')    plt.subplots_adjust(left=0.15) #左边距    plt.grid(True)  #打开网格线    plt.show()

效果图片

转载于:https://www.cnblogs.com/alinger/p/10932048.html

你可能感兴趣的文章
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>