python算法

Python 图片相似度

纵然是瞬间 提交于 2020-02-13 12:55:54
原文: https://www.cnblogs.com/dcb3688/p/4610660.html import cv2 import numpy as np #原文:https://www.cnblogs.com/dcb3688/p/4610660.html # 均值哈希算法 def aHash(img): # 缩放为8*8 img = cv2.resize(img, (8, 8)) # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # s为像素和初值为0,hash_str为hash值初值为'' s = 0 hash_str = '' # 遍历累加求像素和 for i in range(8): for j in range(8): s = s + gray[i, j] # 求平均灰度 avg = s / 64 # 灰度大于平均值为1相反为0生成图片的hash值 for i in range(8): for j in range(8): if gray[i, j] > avg: hash_str = hash_str + '1' else: hash_str = hash_str + '0' return hash_str # 差值感知算法 def dHash(img): # 缩放8*8 img = cv2.resize

Python开发五子棋游戏【新手必学】

故事扮演 提交于 2020-02-13 10:21:00
五子棋源码,原创代码,仅供 python 开源项目学习。 目前电脑走法笨笨的,下一期版本会提高电脑算法 ps:另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我建了个Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步 第二版已发布与另外一篇博文,有兴趣的可以去查看下载。 import pygame import time SCREEN_WIDTH=900 SCREEN_HEIGHT=800 BG_COLOR=pygame.Color(200, 200, 200) Line_COLOR=pygame.Color(255, 255, 200) TEXT_COLOR=pygame.Color(255, 0, 0) # 定义颜色 BLACK = ( 0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = ( 0, 255, 0) BLUE = ( 0, 0, 255) class MainGame(): window = None Start_X = 50 Start_Y = 50 Line_Span = 40 Max_X = Start_X + 18 * Line

python算法之排序(二)

半城伤御伤魂 提交于 2020-02-12 22:01:46
#堆排序#基本思想:1.将初始待排序数字列表(R1,R2,...,Rn)构建成大顶堆,此堆为初始的无序列表# 2.将堆顶元素R1与最后一个元素Rn交换,此时得到新的无序列表(R1,R2,...,Rn-1)和新的有序列表(Rn)# 3.由于交换后新的堆顶R1可能违反堆的性质,因此需要对当前无序列表(R1,R2,...,Rn-1)调整为新堆,# 然后再次将R1与无序列表最后一个元素交换,得到新的无序列表(R1,R2,...,Rn-2)和新的有序列表(Rn-1,Rn).# 不断重复此过程直到有序列表的元素个数为n-1,则整个排序过程完成。#sift_down通过从下而上比较每个节点与其子节点的大小(Ri<R2i,Ri<R2i+1),将最大的数放置到堆顶def sift_down(numList, start, end): root = start while True: child = 2 * root + 1 if child >end: break if child + 1 <=end and numList[child] < numList[child+1]: child += 1 if numList[root] < numList[child]: numList[root], numList[child] = numList[child], numList[root] root

Python短文本自动识别个体是否有自杀倾向【新手必学】

喜你入骨 提交于 2020-02-12 17:43:14
我们以微博树洞为例,讲解了怎么自动爬取单个微博的评论。今天我们就要用上这些数据做一个自杀倾向分类器,这样的分类器如果应用得当,将可以帮助成千上万误入歧途的人们挽回生命。 为了简化问题,我们将短文本分为两种类别中的一种,即要么是正常微博、要么是自杀倾向微博。这样,有了上次的微博树洞,训练集和测试集就非常好获得了。由于是短文本二分类问题,可以使用 scikit-learn 的 SVM 分类模型。 不过要注意的是,我们的分类器并不能保证分类出来的结果百分百正确,毕竟心理状态是很难通过文本准确识别出来的,我们只能通过文字,大致判断其抑郁情况并加以介入。实际上这是一个宁可错杀一百,不可放过一个的问题。毕竟放过一个,可能就有一条生命悄然流逝。 本文源代码: https://github.com/Ckend/suicide-detect-sv... 欢迎一同改进这个项目,在训练集和模型方面,改进的空间还相当大。 PS:另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我建了个Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步 1. 数据准备 数据集整体上分两个部分,一部分是训练集、一部分是测试集。其中

python基础-特性

让人想犯罪 __ 提交于 2020-02-12 12:54:59
导航:   高阶特性:      切片: Python没有针对字符串的截取函数,只需要切片一个操作就可以完成      迭代: Python的 for 循环抽象程度要高于Java的 for 循环,因为Python的 for 循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上      列表生成器: 即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式      生成器: Generator ,一系列算法,使用时才计算值,一般采用for遍历.关键字 yield   高阶函数:        map: map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。      reduce: reduce() 函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。      filter: filter() 也接收一个函数和一个序列。和 map() 不同的时, filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素。      sorted: Python内置的 sorted() 函数就可以对list进行排序.      返回函数 :函数作为返回值,闭包     

python自动化运维之路04

南楼画角 提交于 2020-02-12 10:44:48
装饰器 装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。 在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数的返回结果。 相对于其它方式,装饰器语法简单,代码可读性高。因此,装饰器在Python项目中有广泛的应用。 装饰器的应用场景:饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装 饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。 概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 装饰器的规则: 1 def derector(function): 2 def wrapper(*args,**kwargs): 3 function(*args,**kwargs) 4 return wrapper 装饰器可以用def的形式定义,如上面代码中的decorator。装饰器接收一个可调用对象作为输入参数,并返回一个新的可调用对象。 装饰器新建了一个可调用对象,也就是上面的wrapper。 1.装饰器中如何传递参数? def outter1(Func): def wrapper(args): print("Before") Func(args) print(

python编码与解码

别等时光非礼了梦想. 提交于 2020-02-12 04:10:13
基本概念 字符 :表示数据和信息的字母、数字或其他符号。在电子计算机中,每一个字符与一个二进制编码相对应。 字符的标识( 码位 ):是0-1114111的数字,在Unicode标准中以 4-6个十六进制数字 表示,而且加前缀“U+”。例如,字母A的码位是U+0041,欧元符号的码位是U+20AC. 字符的具体表述 取决于所用的编码。编码是在码位和字节序列之间转换时使用的算法。在UTF-8编码中,A(U+0041)的码位编码成单个字节\x41,而在UTF-16LE编码中编码成两个字节\x41\x00。欧元符号(U+20AC)在UFT-8编码中是三个字节\xe2\x82\xac,而在UTF-16LE编码中编码成两个字节\xac\x20。 编码 :把码位转换成字节序列(通俗来说:把字符串转换成用于存储或传输的字节序列,python中是.encode()) 解码 :把字节序列转换成码位(通俗来说:把字节序列转换成人类可读的文本字符串,python中是.decode()) >>> s = 'café' >>> len(s) # Unicode字符数量 4 >>> b = s.encode('utf8') # 编码为bytes >>> b b'caf\xc3\xa9' >>> len(b) # 字节数 5 >>> b.decode('utf8') # 解码 'café 字节概要

python笔记--冒泡排序升级版

邮差的信 提交于 2020-02-11 04:31:39
前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序。 一、基本原理 1.概念: 冒泡排序(Bubble Sort),是一种计算机领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 2.算法原理: 冒泡排序算法的运作如下:(从后往前) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 二、交换两个数 1.如果a = 10 , b = 20如何交换两个数呢? 2.实现两个数的交换原理其实很简单,设一个临时变量c就可以了: 先把a的值传给c,此时c的值就是10了,a的值还是10 然后把b的值传给a,此时a的值是20,b的值还是20 最后把c的值传给b, 此时b的值是10 3.python里面交换两个数不用那么复杂,用这个方法就行了: a , b = b, a 三、遍历比较相邻的数 1

Python排序算法(二)——冒泡排序

无人久伴 提交于 2020-02-11 04:07:24
有趣的事,Python永远不会缺席! 如需转发,请注明出处: 小婷儿的python https://www.cnblogs.com/xxtalhr/p/10786904.html 一、冒泡排序(Bubble Sort)   冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,一层一层的将较大的元素往后移动,其现象和气泡在上升过程中慢慢变大类似,故成为 冒泡排序 。 1、原理 从第一个和第二个开始比较,如果第一个比第二个大,则交换位置,然后比较第二个和第三个,逐渐往后 经过第一轮后最大的元素已经排在最后,所以重复上述操作的话第二大的则会排在倒数第二的位置。 那重复上述操作n-1次即可完成排序,因为最后一次只有一个元素所以不需要比较 2、举例   举个例子,假设我现在有一个数列需要使用冒泡来排序 [11, 99, 33 , 69, 77, 88, 55, 11, 33, 36,39, 66, 44, 22],我们来看看使用冒泡的详细步骤: 首先11和99比较大小,99大,99继续和后面的作比较,直到最后一个元素,第一轮完了,列表是 [11, 33 , 69, 77, 88, 55, 11, 33, 36,39, 66, 44, 22, 99] 然后,重复第一轮操作,即第二轮比较列表是 [11, 33 , 69

动态规划( python)

吃可爱长大的小学妹 提交于 2020-02-11 03:55:59
  动态规划的三要素:最优子结构,边界和状态转移函数,最优子结构是指每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到(子问题的最优解能够决定这个问题的最优解),边界指的是问题最小子集的解(初始范围),状态转移函数是指从一个阶段向另一个阶段过度的具体形式,描述的是两个相邻子问题之间的关系(递推式)   重叠子问题,对每个子问题只计算一次,然后将其计算的结果保存到一个表格中,每一次需要上一个子问题解时,进行调用,只要o(1)时间复杂度,准确的说,动态规划是利用空间去换取时间的算法.   判断是否可以利用动态规划求解,第一个是判断是否存在重叠子问题, 例子: 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/23/dynamic-programming