python算法库函数,python数据库函数

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库、函数和模块

1.dir函数式可以查看对象的属性

使用方法很简单,举os类型为例,在Python命令窗口输入 dir(‘os’) 即可查看os模块的属性

打开cmd命令窗口:

2.如何查看对象某个属性的帮助文档:两种方法如下:

3.如何查看某个对象的详细:

3.如何查看某个对象的函数:

python的科学计算库有哪些

1、Numpy库简介

在Python中很多高级库都是基本Numpy科学库去做的。之前如果用Python对数据进行操作,需要一行一行或者一个一个数据的去进行操作。而在Numpy中,则是封装了一系列矩阵的操作:首先把数据转换成一系列矩阵的格式,然后再对矩阵进行操作。这样既高效,也省时。Numpy封装了一系列的函数函数,方便我们去操作矩阵。Numpy中一行代码就顶Python中十几行的代码。

2、Pandas库简介

在Pandas 是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas

纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

3、Matplotlib库简介

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,通过

Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

想知道Python标准库math中用来求幂运算的函数是?

Python标准库math中用来求幂运算的函数是pow(x,y)

pow(x,y)函数和x**y是等效的,都是计算x的y次方

用法:

import math

print(math.pow(4,2))

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算法库函数,python数据库函数
本文路径:http://scyanting.com/article/dsioide.html