python的算法库函数 python数值计算库

Python 最重要的库都有哪些

第一、NumPy

成都创新互联公司主营栖霞网站建设的网络公司,主营网站建设方案,app软件开发,栖霞h5小程序制作搭建,栖霞网站营销推广欢迎栖霞等地区企业咨询

NumPy是Numerical

Python的简写,是Python数值计算的基石。它提供多种数据结构、算法以及大部分涉及Python数值计算所需的接口。NumPy还包括其他内容:

①快速、高效的多维数组对象ndarray

②基于元素的数组计算或数组间数学操作函数

③用于读写硬盘中基于数组的数据集的工具

④线性代数操作、傅里叶变换以及随机数生成

除了NumPy赋予Python的快速数组处理能力之外,NumPy的另一个主要用途是在算法和库之间作为数据传递的数据容器。对于数值数据,NumPy数组能够比Python内建数据结构更为高效地存储和操作数据。

第二、pandas

pandas提供了高级数据结构和函数,这些数据结构和函数的设计使得利用结构化、表格化数据的工作快速、简单、有表现力。它出现于2010年,帮助Python成为强大、高效的数据分析环境。常用的pandas对象是DataFrame,它是用于实现表格化、面向列、使用行列标签的数据结构;以及Series,一种一维标签数组对象。

pandas将表格和关系型数据库的灵活数据操作能力与Numpy的高性能数组计算的理念相结合。它提供复杂的索引函数,使得数据的重组、切块、切片、聚合、子集选择更为简单。由于数据操作、预处理、清洗在数据分析中是重要的技能,pandas将是重要主题。

第三、matplotlib

matplotlib是最流行的用于制图及其他二维数据可视化的Python库,它由John D.

Hunter创建,目前由一个大型开发者团队维护。matplotlib被设计为适合出版的制图工具。

对于Python编程者来说也有其他可视化库,但matplotlib依然使用最为广泛,并且与生态系统的其他库良好整合。

第四、IPython

IPython项目开始于2001年,由Fernando

Pérez发起,旨在开发一个更具交互性的Python解释器。在过去的16年中,它成为Python数据技术栈中最重要的工具之一。

尽管它本身并不提供任何计算或数据分析工具,它的设计侧重于在交互计算和软件开发两方面将生产力最大化。它使用了一种执行-探索工作流来替代其他语言中典型的编辑-编译-运行工作流。它还提供了针对操作系统命令行和文件系统的易用接口。由于数据分析编码工作包含大量的探索、试验、试错和遍历,IPython可以使你更快速地完成工作。

第五、SciPy

SciPy是科学计算领域针对不同标准问题域的包集合。以下是SciPy中包含的一些包:

①scipy.integrate数值积分例程和微分方程求解器

②scipy.linalg线性代数例程和基于numpy.linalg的矩阵分解

③scipy.optimize函数优化器和求根算法

④scipy.signal信号处理工具

⑤scipy.sparse稀疏矩阵与稀疏线性系统求解器

SciPy与Numpy一起为很多传统科学计算应用提供了一个合理、完整、成熟的计算基础。

第六、scikit-learn

scikit-learn项目诞生于2010年,目前已成为Python编程者首选的机器学习工具包。仅仅七年,scikit-learn就拥有了全世界1500位代码贡献者。其中包含以下子模块:

①分类:SVM、最近邻、随机森林、逻辑回归等

②回归:Lasso、岭回归等

③聚类:K-means、谱聚类等

④降维:PCA、特征选择、矩阵分解等

⑤模型选择:网格搜索、交叉验证、指标矩阵

⑥预处理:特征提取、正态化

scikit-learn与pandas、statsmodels、IPython一起使Python成为高效的数据科学编程语言。

python常用到哪些库?

Python作为一个设计优秀的程序语言,现在已广泛应用于各种领域,依靠其强大的第三方类库,Python在各个领域都能发挥巨大的作用。

下面我们就来看一下python中常用到的库:

数值计算库:

1. NumPy

支持多维数组与矩阵运算,也针对数组运算提供大量的数学函数库。通常与SciPy和Matplotlib一起使用,支持比Python更多种类的数值类型,其中定义的最重要的对象是称为ndarray的n维数组类型,用于描述相同类型的元素集合,可以使用基于0的索引访问集合中元素。

2. SciPy

在NumPy库的基础上增加了众多的数学、科学及工程计算中常用的库函数,如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等,可进行插值处理、信号滤波,以及使用C语言加速计算。

3. Pandas

基于NumPy的一种工具,为解决数据分析任务而生。纳入大量库和一些标准的数据模型,提供高效地操作大型数据集所需的工具及大量的能快速便捷处理数据的函数和方法,为时间序列分析提供很好的支持,提供多种数据结构,如Series、Time-Series、DataFrame和Panel。

数据可视化库:

4. Matplotlib

第一个Python可视化库,有许多别的程序库都是建立在其基础上或者直接调用该库,可以很方便地得到数据的大致信息,功能非常强大,但也非常复杂。

5. Seaborn

利用了Matplotlib,用简洁的代码来制作好看的图表。与Matplotlib最大的区别为默认绘图风格和色彩搭配都具有现代美感。

6. ggplot

基于R的一个作图库ggplot2,同时利用了源于《图像语法》(The Grammar of Graphics)中的概念,允许叠加不同的图层来完成一幅图,并不适用于制作非常个性化的图像,为操作的简洁度而牺牲了图像的复杂度。

7. Bokeh

跟ggplot一样,Bokeh也基于《图形语法》的概念。与ggplot不同之处为它完全基于Python而不是从R处引用。长处在于能用于制作可交互、可直接用于网络的图表。图表可以输出为JSON对象、HTML文档或者可交互的网络应用。

8. Plotly

可以通过Python notebook使用,与Bokeh一样致力于交互图表的制作,但提供在别的库中几乎没有的几种图表类型,如等值线图、树形图和三维图表。

9. pygal

与Bokeh和Plotly一样,提供可直接嵌入网络浏览器的可交互图像。与其他两者的主要区别在于可将图表输出为SVG格式,所有的图表都被封装成方法,且默认的风格也很漂亮,用几行代码就可以很容易地制作出漂亮的图表。

10. geoplotlib

用于制作地图和地理相关数据的工具箱。可用来制作多种地图,比如等值区域图、热度图、点密度图。必须安装Pyglet(一个面向对象编程接口)方可使用。

11. missingno

用图像的方式快速评估数据缺失的情况,可根据数据的完整度对数据进行排序或过滤,或者根据热度图或树状图对数据进行修正。

web开发库:

12. Django

一个高级的Python Web框架,支持快速开发,提供从模板引擎到ORM所需的一切东西,使用该库构建App时,必须遵循Django的方式。

13. Socket

一个套接字通讯底层库,用于在服务器和客户端间建立TCP或UDP连接,通过连接发送请求与响应。

14. Flask

一个基于Werkzeug、Jinja 2的Python轻量级框架(microframework),默认配备Jinja模板引擎,也包含其他模板引擎或ORM供选择,适合用来编写API服务(RESTful rervices)。

15. Twisted

一个使用Python实现的基于事件驱动的网络引擎框架,建立在deferred object之上,一个通过异步架构实现的高性能的引擎,不适用于编写常规的Web Apps,更适用于底层网络。

数据库管理:

16. MySQL-python

又称MySQLdb,是Python连接MySQL最流行的一个驱动,很多框架也基于此库进行开发。只支持Python 2.x,且安装时有许多前置条件。由于该库基于C语言开发,在Windows平台上的安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代品为衍生版本。

17. mysqlclient

完全兼容MySQLdb,同时支持Python 3.x,是Django ORM的依赖工具,可使用原生SQL来操作数据库,安装方式与MySQLdb一致。

18. PyMySQL

纯Python实现的驱动,速度比MySQLdb慢,最大的特点为安装方式简洁,同时也兼容MySQL-python。

19. SQLAlchemy

一种既支持原生SQL,又支持ORM的工具。ORM是Python对象与数据库关系表的一种映射关系,可有效提高写代码的速度,同时兼容多种数据库系统,如SQLite、MySQL、PostgreSQL,代价为性能上的一些损失。

自动化运维:

20. jumpsever跳板机

一种由Python编写的开源跳板机(堡垒机)系统,实现了跳板机的基本功能,包含认证、授权和审计,集成了Ansible、批量命令等。

支持WebTerminal Bootstrap编写,界面美观,自动收集硬件信息,支持录像回放、命令搜索、实时监控、批量上传下载等功能,基于SSH协议进行管理,客户端无须安装agent。主要用于解决可视化安全管理,因完全开源,容易再次开发。

21. Magedu分布式监控系统

一种用Python开发的自动化监控系统,可监控常用系统服务、应用、网络设备,可在一台主机上监控多个不同服务,不同服务的监控间隔可以不同,同一个服务在不同主机上的监控间隔、报警阈值可以不同,并提供数据可视化界面。

22. Magedu的CMDB

一种用Python开发的硬件管理系统,包含采集硬件数据、API、页面管理3部分功能,主要用于自动化管理笔记本、路由器等常见设备的日常使用。由服务器的客户端采集硬件数据,将硬件信息发送至API,API负责将获取的数据保存至数据库中,后台管理程序负责对服务器信息进行配置和展示。

23. 任务调度系统

一种由Python开发的任务调度系统,主要用于自动化地将一个服务进程分布到其他多个机器的多个进程中,一个服务进程可作为调度者依靠网络通信完成这一工作。

24. Python运维流程系统

一种使用Python语言编写的调度和监控工作流的平台,内部用于创建、监控和调整数据管道。允许工作流开发人员轻松创建、维护和周期性地调度运行工作流,包括了如数据存储、增长分析、Email发送、A/B测试等诸多跨多部门的用例。

GUI编程:

25. Tkinter

一个Python的标准GUI库,可以快速地创建GUI应用程序,可以在大多数的UNIX平台下使用,同样可以应用在Windows和Macintosh系统中,Tkinter 8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

26. wxPython

一款开源软件跨平台GUI库wxWidgets的Python封装和Python模块,是Python语言的一套优秀的GUI图形库,允许程序员很方便地创建完整的、功能健全的GUI用户界面。

27. PyQt

一个创建GUI应用程序的工具库,是Python编程语言和Qt的成功融合,可以运行在所有主要操作系统上,包括UNIX、Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。

28. PySide

一个跨平台的应用程式框架Qt的Python绑定版本,提供与PyQt类似的功能,并相容API,但与PyQt不同处为其使用LGPL授权。

更多Python知识请关注Python自学网。

python哪些标准库

标准库比较多 功能也不同:

标准库

sys

系统相关的参数和函数。 sys 库一般用来访问和修改系统相关信息,比如查看 python 版本、系统环境变量、模块信息和 python 解释器相关信息等等。

os

操作系统接口模块。这个库提供了访问操作系统相关依赖的方式,比如输入输出操作、读写操作、操作系统异常错误信息、进程线程管理、文件管理、调度程序等等。

re

正则表达式操作。这个库是我喜欢并且经常会用到的库,在对大量字符串进行处理的时候用正则表达式是最快速有效的方式,但是正则表达式的学习曲线较高,有兴趣的朋友可以访问这个网站学习。

math

数学函数库。 math 库提供了对 C 语言标准定义的数学函数访问,比如数论(Number-theoretic)的各种表示方法、幂和对数函数(Power and logarithmic functions)、三角函数(Trigonometric functions)、常量圆周率(π)和自然常数(e)等等。

random

生成伪随机数。

伪随机数与随机数(真随机数)不同的是执行环境,随机数是真实世界中通过物理过程实践得出结论,而伪随机数是通过计算机的特定算法生成的数,所以这个过程是可预测的、有规律的,只是循环周期较长,并不能与现实场景相切合。

random库提供生成随机数,可以模拟现实世界中随机取数、随机抽奖等等。

logging

日志记录工具。这个库提供了对应用程序和库函数的日志记录,日常开发中我们经常需要通过日志打印出当前程序的运行状态,实时查看可能出现的堆栈异常和错误信息。

json

Json 编码和解码器。 json 库提供了对 json 数据的支持,日常开发中我们做前后端分离需要对传输数据 json 进行序列化和反序列化操作,以保证对数据的完整性和有效性,而序列化和反序列化其实就是编码和解码的过程。

pickle

Python 对象序列化库。 pickle 库支持对 python 对象进行序列化和反序列化操作,当我们需要将处理好的对象保存到文件或数据库中时,就可以将其序列化成二进制数据,从而更好的保存起来。

shelve

Python 对象持久化。简单的数据存储方案。

socket

底层网络接口。 socket(套接字) 库提供了标准的BSD(伯克利套接字) Socket API,可以通过访问底层操作系统 Socket 的相关接口进行网络通讯。

datetime

基本日期和时间类型库。该库提供了各种简单和复杂的方式处理日期和时间,日常我们会用时间测算时间消耗、复杂度,对存储的创建时间和修改时间也需要进一步说明,对计时器的描述和控制也需要用到该库。

hashlib

安全哈希和消息摘要。摘要算法 其实就是对某些数据进行加密(不可逆的加密算法),因为被加密的数据无法破解,所以就能防止被篡改。常见的摘要算法有 MD5、SHA1,一般我们会用 MD5 对用户口令进行加密,防止盗用后被轻易破解;而 SHA1 与 MD5 类似,但是 SHA1 会产生更长的长度,也更安全,但是算法的复杂性通常伴随着存储空间和时间的消耗。要说比SHA1更长的字符长度,还有 SHA224、SHA256、SHA384 和 SHA512,看名字就能知道。

大家都知道无论算法生成的字符长度如何都有可能发生碰撞(被破解),这是不可避免的,所以具体场景具体情况而定。

configparser

配置文件解析器。 configparser 库可以轻松定制配置文件,通过解析配置文件的信息我们就可以全局访问相关配置。

urllib

URL 处理模块。 urllib 库集成了处理 URLs(统一资源定位符)的各种模块:

URL urllib.request URL robots.txt urllib 库对访问网络有很好的支持,提供了对数据的访问和处理、文件的上传和下载、记录 cookie 和 session 等等。

itertools

为高效循环而创建迭代器的函数。 itertools 库也是经常需要用到,当我们要对某些数进行 for-in 时就需要先将其处理成一个可迭代对象,之后我们才能进行遍历操作。

collections

容器数据类型库。 collections 库提供了对所有容器数据类型的支持,包括 dict, list, set 和 tuple。我们可以用此库对不同数据类型进行操作,常有的函数方法有这些:

namedtuple() 创建命名元组子类的工厂函数 deque 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop) ChainMap 类似字典(dict)的容器类,将多个映射集合到一个视图里面 Counter 字典的子类,提供了可哈希对象的计数功能 OrderedDict 字典的子类,保存了他们被添加的顺序 defaultdict 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值 UserDict 封装了字典对象,简化了字典子类化 UserList 封装了列表对象,简化了列表子类化 UserString 封装了列表对象,简化了字符串子类化 functools

高阶函数和可调用对象上的操作。该库主要调用高阶函数,是常规函数的一种补充。目前库中包含以下几种函数:

cmp_to_key lru_cache total_ordering partial partialmethod reduce singledispatch update_wrapper wraps threading

线程并行库。 threading 库支持线程和多线程的操作,针对多线程并发的问题可以给数据加同步锁,一次只能让一个线程处理数据,从而避免出现数据读写混乱。

在 CPython 解释器上,因为GIL(全局解释器锁)锁机制的存在的,被设计成线程安全,所以同一时间只能执行一个线程,这就导致了多线程不能发挥出计算机的多核特性。

multiprocessing

进程并行库。 multiprocessing 库与 threading 库很类似,不同的是进程库可以创建子进程避开 GIL,从而弥补线程库存在的劣势和发挥计算机的多核特性。

timeit

测量小代码片段的执行时间。此库主要用来计算运行代码的时间消耗,支持多种方式传入参数。

atexit

退出处理器。当处理一个函数需要立马退出时可以使用该库。

abc

抽象基类。 abc 库定义抽象基类,以便其他类派生出新类。比如 collections 容器库中就有此派生出的 collections.abc 类,派生出来的类可以进一步实现。

asyncio

异步IO库。 asyncio 库是一个用 async/await 关键字编写并发的库,为多个异步框架提供基础功能,能够实现高性能的网络、Web服务器、数据库连接和分布式任务队列等。

copy

浅层和深层复制操作。 copy 库提供对对象的拷贝,我们都知道要制作对象副本,是无法通过简单值传递创建新变量的方式做到,因为新变量所指向的内存空间依旧是原对象本身,所以对新变量进行任何操作都会改变原对象。那么, copy 库就提供了制作对象副本的各种方法,会开辟一个新的内存空间存放副本对象,修改操作不会对原对象有任何干预。

csv

csv(Comma Separated Values)文件读写库。此库支持以纯文本的形式存储表格数据(数字和文本)。

operator

标准运算符替代函数库。此库是将 python 自有的运算符作为有效函数,比如表达式 x+y 可以用函数 operator.add(x, y) 表示;比如表达式 a*b 可以用函数 operator.mul(a, b) 表示,等等。

enum

枚举库。 enum 库支持创建枚举类来存储大量同类型的不可变常量,以便其他函数调用。创建出来的枚举类是可迭代对象,所以可以用 for-in 枚举出所有常量。

heapq

堆队列算法。这个模块提供了堆队列算法的实现,也称为优先队列算法。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务。所以当我们要求前n最大/最小值的时候就可以用此算法来实现, heapq 库中也提供了相应函数实现。

http

HTTP 模块。 http 模块是一个包,收集了多个处理超文本传输协议的模块:

urllib.request http 模块通过 http.HTTPStatus 枚举定义了HTTP状态码 以及相关联消息。

profile、pstats

性能分析工具。 profile 模块提供了 profile 和 cProfile 两种不同实现的性能分析工具,可用来描述程序各个部分的执行时间和频率,统计后的信息可以通过 pstats 模块保存并使用。

ssl

TLS/SSL(传输安全协议)。此模块提供对安全协议的支持,通过应用上下文,可将 TLS(传输层安全性协议)或其前身 SSL(安全套接层)支持安全协议,能为互联网通信提供安全和数据完整性保障。一般 HTTPS 协议都支持 TLS/SSL 加密。

unitest

单元测试框架。 unitest 库常用于单元测试,受到 JUnit 和其他主流测试库的启发, unitest 库的功能和函数与它们有着相似的风格。

uuid

UUID库。 uuid 库主要用途是生成随机字符串,库中有多个版本的 UUID 对象方法,比如版本 1、3、4 和 5 的 uuid1() 、 uuid3() 、 uuid4() 和 uuid5() 。需要注意的是,如果要生成随机字符串,可以使用 uuid1() 和 uuid4() ,但是 uuid1() 会存在隐私风险,因为生成的原理里边包含用户访问计算机的网络地址,而 uuid4() 是通过随机字符生成。

希望可以帮助到你。

python有没有简单的遗传算法库

首先遗传算法是一种优化算法,通过模拟基因的优胜劣汰,进行计算(具体的算法思路什么的就不赘述了)。大致过程分为初始化编码、个体评价、选择,交叉,变异。

以目标式子 y = 10 * sin(5x) + 7 * cos(4x)为例,计算其最大值

首先是初始化,包括具体要计算的式子、种群数量、染色体长度、交配概率、变异概率等。并且要对基因序列进行初始化

[python] view plain copy

pop_size = 500      # 种群数量

max_value = 10      # 基因中允许出现的最大值

chrom_length = 10       # 染色体长度

pc = 0.6            # 交配概率

pm = 0.01           # 变异概率

results = [[]]      # 存储每一代的最优解,N个二元组

fit_value = []      # 个体适应度

fit_mean = []       # 平均适应度

pop = geneEncoding(pop_size, chrom_length)

其中genEncodeing是自定义的一个简单随机生成序列的函数,具体实现如下

[python] view plain copy

def geneEncoding(pop_size, chrom_length):

pop = [[]]

for i in range(pop_size):

temp = []

for j in range(chrom_length):

temp.append(random.randint(0, 1))

pop.append(temp)

return pop[1:]

编码完成之后就是要进行个体评价,个体评价主要是计算各个编码出来的list的值以及对应带入目标式子的值。其实编码出来的就是一堆2进制list。这些2进制list每个都代表了一个数。其值的计算方式为转换为10进制,然后除以2的序列长度次方减一,也就是全一list的十进制减一。根据这个规则就能计算出所有list的值和带入要计算式子中的值,代码如下

[python] view plain copy

# 0.0 coding:utf-8 0.0

# 解码并计算值

import math

def decodechrom(pop, chrom_length):

temp = []

for i in range(len(pop)):

t = 0

for j in range(chrom_length):

t += pop[i][j] * (math.pow(2, j))

temp.append(t)

return temp

def calobjValue(pop, chrom_length, max_value):

temp1 = []

obj_value = []

temp1 = decodechrom(pop, chrom_length)

for i in range(len(temp1)):

x = temp1[i] * max_value / (math.pow(2, chrom_length) - 1)

obj_value.append(10 * math.sin(5 * x) + 7 * math.cos(4 * x))

return obj_value

有了具体的值和对应的基因序列,然后进行一次淘汰,目的是淘汰掉一些不可能的坏值。这里由于是计算最大值,于是就淘汰负值就好了

[python] view plain copy

# 0.0 coding:utf-8 0.0

# 淘汰(去除负值)

def calfitValue(obj_value):

fit_value = []

c_min = 0

for i in range(len(obj_value)):

if(obj_value[i] + c_min  0):

temp = c_min + obj_value[i]

else:

temp = 0.0

fit_value.append(temp)

return fit_value

然后就是进行选择,这是整个遗传算法最核心的部分。选择实际上模拟生物遗传进化的优胜劣汰,让优秀的个体尽可能存活,让差的个体尽可能的淘汰。个体的好坏是取决于个体适应度。个体适应度越高,越容易被留下,个体适应度越低越容易被淘汰。具体的代码如下

[python] view plain copy

# 0.0 coding:utf-8 0.0

# 选择

import random

def sum(fit_value):

total = 0

for i in range(len(fit_value)):

total += fit_value[i]

return total

def cumsum(fit_value):

for i in range(len(fit_value)-2, -1, -1):

t = 0

j = 0

while(j = i):

t += fit_value[j]

j += 1

fit_value[i] = t

fit_value[len(fit_value)-1] = 1

def selection(pop, fit_value):

newfit_value = []

# 适应度总和

total_fit = sum(fit_value)

for i in range(len(fit_value)):

newfit_value.append(fit_value[i] / total_fit)

# 计算累计概率

cumsum(newfit_value)

ms = []

pop_len = len(pop)

for i in range(pop_len):

ms.append(random.random())

ms.sort()

fitin = 0

newin = 0

newpop = pop

# 转轮盘选择法

while newin  pop_len:

if(ms[newin]  newfit_value[fitin]):

newpop[newin] = pop[fitin]

newin = newin + 1

else:

fitin = fitin + 1

pop = newpop

以上代码主要进行了3个操作,首先是计算个体适应度总和,然后在计算各自的累积适应度。这两步都好理解,主要是第三步,转轮盘选择法。这一步首先是生成基因总数个0-1的小数,然后分别和各个基因的累积个体适应度进行比较。如果累积个体适应度大于随机数则进行保留,否则就淘汰。这一块的核心思想在于:一个基因的个体适应度越高,他所占据的累计适应度空隙就越大,也就是说他越容易被保留下来。

选择完后就是进行交配和变异,这个两个步骤很好理解。就是对基因序列进行改变,只不过改变的方式不一样

交配:

[python] view plain copy

# 0.0 coding:utf-8 0.0

# 交配

import random

def crossover(pop, pc):

pop_len = len(pop)

for i in range(pop_len - 1):

if(random.random()  pc):

cpoint = random.randint(0,len(pop[0]))

temp1 = []

temp2 = []

temp1.extend(pop[i][0:cpoint])

temp1.extend(pop[i+1][cpoint:len(pop[i])])

temp2.extend(pop[i+1][0:cpoint])

temp2.extend(pop[i][cpoint:len(pop[i])])

pop[i] = temp1

pop[i+1] = temp2

变异:

[python] view plain copy

# 0.0 coding:utf-8 0.0

# 基因突变

import random

def mutation(pop, pm):

px = len(pop)

py = len(pop[0])

for i in range(px):

if(random.random()  pm):

mpoint = random.randint(0, py-1)

if(pop[i][mpoint] == 1):

pop[i][mpoint] = 0

else:

pop[i][mpoint] = 1

整个遗传算法的实现完成了,总的调用入口代码如下

[python] view plain copy

# 0.0 coding:utf-8 0.0

import matplotlib.pyplot as plt

import math

from calobjValue import calobjValue

from calfitValue import calfitValue

from selection import selection

from crossover import crossover

from mutation import mutation

from best import best

from geneEncoding import geneEncoding

print 'y = 10 * math.sin(5 * x) + 7 * math.cos(4 * x)'

# 计算2进制序列代表的数值

def b2d(b, max_value, chrom_length):

t = 0

for j in range(len(b)):

t += b[j] * (math.pow(2, j))

t = t * max_value / (math.pow(2, chrom_length) - 1)

return t

pop_size = 500      # 种群数量

max_value = 10      # 基因中允许出现的最大值

chrom_length = 10       # 染色体长度

pc = 0.6            # 交配概率

pm = 0.01           # 变异概率

results = [[]]      # 存储每一代的最优解,N个二元组

fit_value = []      # 个体适应度

fit_mean = []       # 平均适应度

# pop = [[0, 1, 0, 1, 0, 1, 0, 1, 0, 1] for i in range(pop_size)]

pop = geneEncoding(pop_size, chrom_length)

for i in range(pop_size):

obj_value = calobjValue(pop, chrom_length, max_value)        # 个体评价

fit_value = calfitValue(obj_value)      # 淘汰

best_individual, best_fit = best(pop, fit_value)        # 第一个存储最优的解, 第二个存储最优基因

results.append([best_fit, b2d(best_individual, max_value, chrom_length)])

selection(pop, fit_value)       # 新种群复制

crossover(pop, pc)      # 交配

mutation(pop, pm)       # 变异

results = results[1:]

results.sort()

X = []

Y = []

for i in range(500):

X.append(i)

t = results[i][0]

Y.append(t)

plt.plot(X, Y)

plt.show()

最后调用了一下matplotlib包,把500代最优解的变化趋势表现出来。

完整代码可以在github 查看

欢迎访问我的个人博客

阅读全文

二级Python----Python的内置函数及标准库(DAY 8)

python的内置函数(68个)

Python考核31个内置函数,

python内置了很多内置函数、类方法属性及各种模块。当我们想要当我们想要了解某种类型有哪些属性方法以及每种方法该怎么使用时,我们可以使用dir()函数和help()函数在python idle交互式模式下获得我们想要的信息。

• dir()函数获得对象中可用属性的列表

Python中的关键词有哪些?

dir(__builtins__):查看python内置函数

help(‘keywords‘):查看python关键词

如微分积分方程的求解程序、访问互联网、获取日期和时间、机器学习算法等。这些程序往往被收入程序库中,构成程序库。

只有经过严格检验的程序才能放在程序库里。检验,就是对程序作充分的测试。通常进行的有正确性测试、精度测试、速度测试、边界条件和出错状态的测试。经过检验的程序不但能保证计算结果的正确性,而且对错误调用也能作出反应。程序库中的程序都是规范化的。所谓规范化有三重含义:①同一库里所有程序的格式是统一的;② 对这些程序的调用方法是相同的;③ 每个程序所需参数的数目、顺序和类型都是严格规定好的。

Python的库包含标准库和第三方库

标准库:程序语言自身拥有的库,可以直接使用。help('modules')

第三方库:第三方者使用该语言提供的程序库。

标准库: turtle 库(必选)、 random 库(必选)、 time 库(可选)。

• turtle 库:图形绘制库

原理如同控制一只海龟,以不同的方向和速度进行位移而得到其运动轨迹。

使用模块的帮助时,需要先将模块导入。

例如:在IDLE中输入import turtle

dir(turtle)

help(turtle.**)

1.画布

画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置。

setup()方法用于初始化画布窗口大小和位置,参数包括画布窗口宽、画布窗口高、窗口在屏幕的水平起始位置和窗口在屏幕的垂直起始位置。

参数:width, height: 输入宽和高为整数时,表示 像素 ;为小数时,表示占据电脑屏幕的比例。(startx,starty):这一坐标表示

矩形窗口左上角顶点的位置,如果为空,则窗口位于屏幕中心:

例如:setup(640,480,300,300)表示在桌面屏幕(300,300)位置开始创建640×480大小的画布窗体。

2、画笔

• color() 用于设置或返回画笔颜色和填充颜色。

例如:color(‘red’)将颜色设为红色,也可用fillcolor()方法设置或返回填充颜色,或用pencolor()方法设置或返回笔触颜色。


分享文章:python的算法库函数 python数值计算库
本文地址:http://azwzsj.com/article/dossghh.html