python算法

python计算不规则图形面积算法

末鹿安然 提交于 2019-12-05 05:15:06
介绍:大三上做一个医学影像识别的项目,医生在原图上用红笔标记病灶点,通过记录红色的坐标位置可以得到病灶点的外接矩形,但是后续会涉及到红圈内的面积在外接矩形下的占比问题,有些外接矩形内有多个红色标记,在使用网上的opencv的fillPoly填充效果非常不理想,还有类似python计算任意多边形方法也不理想的情况下,自己探索出的一种效果还不错的计算多圈及不规则图形的面积的算法。 医生提供的病灶标记图和原图,大部分长这样 但也有一些多圈情况 很明显,这些图片都是非常需要计算面积占比的,对样本需要筛选 通过百度,用opencv的填充来计算面积,一部分效果很差,单圈画不全,多圈都是错(用将面积计算结果上色,方便观察) 通过此算法之后,无论单圈,多圈,面积计算准确度提高许多 能较为准确的计算出不规则图形的面积 正文:算法的思想很简单,遍历图片每一列,通过色差判断是否遇到标记圈,将坐标全部记录,对每一列的坐标都进行最小行和最大行记录,确定每一列的最小和最大的坐标,然后上色(类似opencv的fillPoly的实现,但是细节有些区别),只是这样效果并不好,将图片旋转90度,再做一边,将两个图片的结果放在一起做与操作,得到结果就能很好的处理多圈的标记问题和多算面积的问题(比如上面的08-LM), 算法实现 全程只用pillow库 首先先用屏幕拾色器获取目标颜色的rgb值,我这种情况下就是(237

python实现真正的冒泡排序算法(时间复杂度优化版)!

本小妞迷上赌 提交于 2019-12-05 03:56:32
近期很多童鞋在讨论大厂面试的算法题,有部分同学表示一脸懵逼,不知从何下手,还有一一部分同学写的冒泡排序算法是直接从网上复制下来的冒泡排序,大多数都没有考虑时间复杂度,说白了只是实现了冒泡的流程,严格来讲只能算是一个伪冒泡排序, 那么接下来给大家来捋一捋冒泡排序的原理,只有搞懂排序的原理,才能更好的掌握,写出真正的冒泡排序算法: 1、冒泡排序原理 直观点先看图(注:图片来源于网络)    从上图我们可以看出冒泡排序的规则,归纳几点如下: 冒泡的规则: 每一轮获取第一个数和后面的数据进行依次比较的过程,称为一轮冒泡的过程 每一轮冒泡.都是先拿第一个数,依次比对相邻的两个数,如果前一个数比后一个数大,则交换他们的位置,这一轮比较完毕,会把最大的数放在最后面。 然后反复重复上面的步骤(每一轮都能将前面数据中一个最大数,放到后面),直到一轮冒泡下来没有任何数据需交互位置,此时数据已经为有序状态 冒泡的次数: 假设列表的长度为n,冒泡排序是每次拿出来第一个元素,需要拿多少次呢?应该是列表的长度减1,意味着每一个长度为n的列表,需要冒泡 n-1 次 每次冒泡比较的次数: 每一次冒泡,都能排好一个数据的顺序,第一次冒泡,需要进行依次比较的次数为n次,那么随着次的增加排好的数据也会越多,需要比较的数据就越少。关系图如下: 第几次冒泡 比较的次数 1 n-1 2 n-2 3 n-3 4 n-4

Python中 字典排序、列表排序

强颜欢笑 提交于 2019-12-05 02:28:42
一、字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排序和按“值”排序。 1、按“值”排序 按“值”排序就是根据字典的值进行排序,可以使用内置的sorted()函数。 sorted(iterable[, cmp[, key[, reverse]]]) (1)iterable:是可迭代类型类型; (2)cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项; (3)key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项; (4)reverse:排序规则. reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)。 返回值: 是一个经过排序的可迭代类型 ,与iterable一样。一般来说,cmp和key可以使用lambda表达式。 如果对字典进行排序,常用的形式如下: sorted(dict.items(), key=lambda e:e[1], reverse=True) , 其中e表示dict.items()中的一个元素,e[1]则表示按 值排序如果把e[1]改成e[0],那么则是按键排序,reverse=False可以省略,默认为升序排列。 说明:字典的items

Python 代码优化常见技巧

社会主义新天地 提交于 2019-12-04 22:26:52
代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进。在算法的时间复杂度排序上依次是: O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> O(n!) 因此如果能够在时间复杂度上对算法进行一定的改进,对性能的提高不言而喻。但对具体算法的改进不属于本文讨论的范围,读者可以自行参考这方面资料。下面的内容将集中讨论数据结构的选择。 字典 (dictionary) 与列表 (list) Python 字典中使用了 hash table,因此查找操作的复杂度为 O(1),而 list 实际是个数组,在 list 中,查找需要遍历整个 list,其复杂度为 O(n),因此对成员的查找访问等操作字典要比 list 更快。 清单 1. 代码 dict.py from time import time t = time() list = ['a','b','is','python','jason','hello',

Python示例项目学习

ε祈祈猫儿з 提交于 2019-12-04 21:55:31
原文地址: http://www.360doc.com/showweb/0/0/874025604.aspx 「 Python3 实现火车票查询工具 」 相信很多人学Python都是冲着它强大的爬虫功能去的,下面的两门课程都和爬虫有关。它们都相当实用,一个关乎出行,一个关乎你的幸福...... 「 Python实现火车票查询工具 」 很适合用来入门爬虫。你将学习到爬虫最重要的两个步骤——数据的爬取和数据可视化。完成项目后,你只需要敲一行命令就能获得你想要的车票信息,墙裂推荐各位小伙伴学习。 效果如图: 课程简介: 当你想查询一下火车票信息的时候,你还在上 12306 官网吗?或是打开你手机里的 APP? 下面让我们来用 Python 写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚掌握了 Python 基础,这将是个不错的小练习。 知识点: Python 基础知识的综合运用 docopt 、 requests 、 colorama 及 prettytable 库的使用 setuptools 的使用 链 接: https://www.shiyanlou.com/courses/623 「 Python3 实现淘女郎照片爬虫 」 每一个老司机都和这门课相见恨晚。 它的标题可能吸引不了你,但请直接看效果: 这是一个很普通的页面

Python开源项目Top30

社会主义新天地 提交于 2019-12-04 21:54:58
原文地址: https://www.cnblogs.com/stoker/p/9101825.html No 1:Home-assistant (v0.6+) 基于Python 3的开源家庭自动化平台[Github 11357 stars,由Paulus Schoutsen提供] https://github.com/home-assistant/home-assistant No 2:Pytorch PyTorch是使用GPU和CPU优化的深度学习张量库,基于Python语言编写。[Github 11019 stars,由PyTorch团队的Adam Paszke和其他人提供] https://github.com/pytorch/pytorch No 3:Grumpy Grumpy是一个Python to Go的源代码翻译编译器和运行时,旨在取代CPython 2.7。关键区别在于,Grumpy是将Python源码编译为Go源代码,然后将其编译为native code,而不是bytecode。这也就意味着Grumpy没有虚拟机(VM)。编译好的Go源码是对Grumpy运行时的一系列调用,一个Go库服务于具有相似目的的Python C API。 [Github 8367 stars,由Google的Dylan Trotter及其他工作人员提供]。 https://github

Python10大热门项目

淺唱寂寞╮ 提交于 2019-12-04 21:54:53
文章地址: https://baijiahao.baidu.com/s?id=1625230403885659615&wfr=spider&for=pc 今天给大家盘点一下实验楼最热门的10个Python练习项目。第二名是《 200 行 Python 代码实现 2048》,第三名是《 Python3 实现火车票查询工具》。有没有学过5门以上的同学? 注:因为百家无法插入外链,所有项目 链接 可以在实验楼公号后台回复关键字“Python路径”获取。 10. Python 气象数据分析 当前学习人数:10506。该项目对意大利北部沿海地区的气象数据进行分析与可视化。通过学习对数据进行清理,然后运用 Python 中 matplotlib 模块的对数据进行可视化处理,最终从清晰的图表中得出我们的结论。 知识点: 1.matplotlib库画出图像 2.scikitlearn库对数据进行回归分析 3.numpy库对数据进行切片 9. Python 基于共现提取《釜山行》人物关系 当前学习人数:14264。项目使用 python3 编写代码分析文本中人物的共现关系,完成对《釜山行》文本的人物关系提取,并利用Gephi软件对提取的人物关系绘制人物关系图。 知识点: 1.共现网络的基本原理 2.人物关系提取的具体实现 3.`jieba`库的基本使用 4.Gephi软件的基本使用 8.

python自动化测试面试题

瘦欲@ 提交于 2019-12-04 21:50:13
Python 自动化测试面试题目 1、super 是干嘛用的?在 Python2 和 Python3 使用,有什么区别?为什么要使用 super?请举例说明。 答: super 用于继承父类的方法、属性。 super 是新式类中才有的,所以 Python2 中使用时,要在类名的参数中写 Object。Python3 默认是新式类,不用写,直接可用。 使用 super 可以提高代码的复用性、可维护性。修改代码时,只需修改一处。 代码举例: class baseClass: def test1 ( self, num): print(num) class sonClass( baseClass): def test2 ( self): super().test1(num) son = sonClass() son.test1( 11) 2、阅读以下代码,推导最后结果: def add (n, i): return n+i def test (): for i in range( 4): yield i g = test() for n in [ 1, 10, 5]: g = (add(n, i) for i in g) print(list(g)) # 结果是 [15, 16, 17, 18] 答: 所有的结果都是生成器表达式,不调用它,不从里面取值,就不干活。附上我的推导过程: n

Python进阶之路二

为君一笑 提交于 2019-12-04 21:10:14
Python3 错误和异常 异常处理try/except try 语句按照如下方式工作: 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。 如果没有异常发生,忽略 except 子句,try 子句执行后结束。 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。 如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。 最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出。 import sys try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except OSError as err: print("OS error: {0}".format(err)) except ValueError: print("Could not convert data to an integer.") except: print("Unexpected error:", sys.exc_info()[0]) raise try/except...else for arg

简易中文分词算法(python)

杀马特。学长 韩版系。学妹 提交于 2019-12-04 20:59:40
主要注意一下词表的中文编码,可以用sublime转换一下 写的不是很好也不太完善,比较粗略吧,结课以后如有机会我会完善的 —— 2017.10.27 # -*- coding: utf-8 -*- __author__ = 'Zhao' import re import operator # --------------- in this part we save the list as list --------------- path = '/Users/apple/desktop/' # 这里可以随便改你存放的文件夹 fp = open(path + 'list.txt' ) # list.txt这里可以放你的词表的文件名 ori = fp.readlines() # ori is the list with out any operation copy = [] for x in ori: x = re.sub( r'\n' , '' , x) copy.append(x) # in this part we change the format in a into standard format and save as copy fp.close() # we close the file, then we can run the list totally in this