python算法

Python 周刊第 418 期

北慕城南 提交于 2019-12-10 04:33:38
新闻 PyCon US 2020 开始接受财务赞助! https://pycon.blogspot.com/2019/10/financial-aid-launches-for-pycon-us-2020.html2020 年 Python 美国开发者大会,tips: 中国也有,可以赞助国内的) 已开放财务赞助申请,Pycon 将在 2020 年 1 月 31 日之前接受财务赞助。Python 软件基金会和 PyLadies 会对该大会进行财务赞助。今年,Python 软件基金会将提供 130000 美元的财务赞助,而 PyLadies 会根据 2019 年全年的捐款情况尽其所能赞助 Pycon。 VS Code 支持 Jupyter Notebook 的编辑 https://devblogs.microsoft.com/python/announcing-support-for-native-editing-of-jupyter-notebooks-in-vs-code/ 文章、教程或研讨会 用 Python 从 Last.fm API 接口获取音乐数据 https://www.dataquest.io/blog/last-fm-api-python/ 深度学习研究人员关于 TensorFlow 2.0 和 Keras 的概述 https://colab.research

python数据挖掘(5.Apriori算法)

六眼飞鱼酱① 提交于 2019-12-10 04:22:23
第一章我们介绍了最基础的亲和性分析,尝试了所有的规则计算了所有的置信度和支持度,但是这个方法效率不高而且我们使用的数据集只有5种商品,但是实际生活中即使是小商店的商品也会超过百种,而网店商品的种类则可能更多,依旧使用第一章的亲和性分析,那么随着商品数量的增加,计算量和计算的时间也会急剧增加,所以需要一个聪明的算法来解决这个问题 Apriori算法 Apriori 算法诗一个景点的亲和性分析算法,他只从数据集中频繁出现的商品中选取共同出现的商品组成 频繁项集 ,避免上述复杂度呈指数级增长的问题,一旦找到了 频繁项集 ,生成关联规则就很容易了。 Apriori算法首先保证规则在数据集中有足够的支持度,最重要的一个参数就是 最小支持度 比如要生成商品A B的频繁项集(A,B)要求支持度至少为30,那么A,B都必须至少在数据集中出现30次,更大的频繁项集也要最受这个约定。 这一章我们通过电影推荐的问题来举例。 数据集地址在文章开头 In [1]: import numpy as np In [2]: import pandas as pd In [3]: all_ratings = pd.read_csv('/Users/gn/scikit--learn/ml-100k/u.data',delim ...: iter="\t", header=None, names = ["UserID"

2019年12月9日开发手记

余生长醉 提交于 2019-12-10 00:16:24
现阶段的任务 1、先把andriod_python调通 2、网络传输摄像头数据 到 ubuntu上保存, 3、移植测试算法到安卓板子上 andriod_python是为了要在安卓的板子上调用python程序,现在有两个方案: 方案一: 直接在板子上移植程序,板子是定制的A5板,内部支持python,但缺少很多库,例如opencv与numpy。如果用这种方案,需要用c重写opencv的函数,然后调用它,以取代opencv,例如我之前写的基于V4L2框架的摄像头读取程序,仅实现这一功能就差不多写了900+行代码,因此工作量极大。 方案二: Github开源方式,直接在apk里面就可以调用python, 会方便丰富一些。目前正在研究,Github网址: https://github.com/devpack/android-python27 来源: https://www.cnblogs.com/lvfengkun/p/12014234.html

第一章 python数据结构和算法--1.7 字典排序

[亡魂溺海] 提交于 2019-12-09 23:50:03
问题 你想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序。 解决方案 为了能控制一个字典中元素的顺序,你可以使用 collections 模块中的 OrderedDict 类。 在迭代操作的时候它会保持元素被插入时的顺序,示例如下: from collections import OrderedDict d = OrderedDict ( ) d [ 'foo' ] = 1 d [ 'bar' ] = 2 d [ 'spam' ] = 3 d [ 'grok' ] = 4 for key in d : print ( key , d [ key ] ) foo 1 bar 2 spam 3 grok 4 当你想要构建一个将来需要序列化或编码成其他格式的映射的时候, OrderedDict 是非常有用的。 比如,你想精确控制以 JSON 编码后字段的顺序,你可以先使用 OrderedDict 来构建这样的数据: import json json . dumps ( d ) '{"foo": 1, "bar": 2, "spam": 3, "grok": 4}' 讨论 OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候, 它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。 需要注意的是,一个

第一章 python数据结构和算法--1.6 字典中的键映射多个值

偶尔善良 提交于 2019-12-09 22:44:49
问题 怎样实现一个键对应多个值的字典(也叫 multidict)? 解决方案 一个字典就是一个键对应一个单值的映射。如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中, 比如列表或者集合里面。比如,你可以像下面这样构造这样的字典: d = { 'a' : [ 1 , 2 , 3 ] , 'b' : [ 4 , 5 ] } e = { 'a' : { 1 , 2 , 3 } , 'b' : { 4 , 5 } } 选择使用列表还是集合取决于你的实际需求。如果你想保持元素的插入顺序就应该使用列表, 如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)。 你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。 defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值,所以你只需要关注添加元素操作了。比如: from collections import defaultdict d = defaultdict ( list ) d [ 'a' ] . append ( 1 ) d [ 'a' ] . append ( 2 ) d [ 'b' ] . append ( 4 ) d = defaultdict ( set ) d [ 'a' ] . add ( 1 ) d [ 'a' ] . add ( 2 )

python 线程,GIL 和 ctypes

☆樱花仙子☆ 提交于 2019-12-09 12:18:01
GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题。运行下面这段 python 程序,CPU 占用率是多少? 请勿在工作中模仿,危险:) def dead_loop(): while True: pass dead_loop() 答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU。在我的双核 CPU 上,这个死循环只会吃掉我一个核的工作负荷,也就是只占用 50% CPU。那如何能让它在双核机器上占用 100% 的 CPU 呢?答案很容易想到,用两个线程就行了,线程不正是并发分享 CPU 运算资源的吗。可惜答案虽然对了,但做起来可没那么简单。下面的程序在主线程之外又起了一个死循环的线程 import threading def dead_loop(): while True: pass 新起一个死循环线程 t = threading.Thread(target=dead_loop) t.start() 主线程也进入死循环 dead_loop() t.join() 按道理它应该能做到占用两个核的 CPU 资源,可是实际运行情况却是没有什么改变,还是只占了 50% CPU 不到。这又是为什么呢?难道 python 线程不是操作系统的原生线程?打开 system monitor 一探究竟

python 实现十大排序算法

时光总嘲笑我的痴心妄想 提交于 2019-12-09 00:24:17
排序算法实现 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 时间空间复杂度 冒泡排序 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法过程: 进行N-1趟操作 每一趟,都是不断的比较相邻的元素,那么一趟下来,就会将最大的移到排好顺序的最后面的位置。 代码实现: def bubbleSort ( array ) : ''' 冒泡排序 ''' for i in range ( len ( array ) - 1 , - 1 , - 1 ) : for j in range ( i ) : if array [ j ] > array [ j + 1 ] : array [ j ] , array [ j + 1 ] = array [ j + 1 ] , array [ j ] return array 最佳情况:T(n) = O(n) 最坏情况:T(n) = O(n2) 平均情况:T(n) = O(n2) 选择排序 选择排序是最稳定的排序了,不管什么情况都是O(n^2),唯一的优点可能是in-place,想法非常简单,进行n-1趟排序,每次从没排好序的部分选一个最小的元素放到已经排好序的序列的末尾。 代码实现: def selectSort ( array ) : ''' 选择排序 ''' for i in

python实现kNN算法识别手写体数字

こ雲淡風輕ζ 提交于 2019-12-08 19:25:05
1。总体概要 kNN算法已经在上一篇 博客 中说明。对于要处理手写体数字,需要处理的点主要包括: (1)图片的预处理:将png,jpg等格式的图片转换成文本数据,本博客的思想是,利用图片的rgb16进制编码(255,255,255)为白色,(0,0,0)为黑色,获取图片大小后,逐个像素进行判断分析,当此像素为空白时,在文本数据中使用0来替换,反之使用1来替换。 from PIL import Image '''将图片转换成文档,使用0,1分别替代空白和数字''' pic = Image.open( '/Users/wangxingfan/Desktop/1.png' ) path = open( '/Users/wangxingfan/Desktop/1.txt' , 'a' ) width = pic.size[ 0 ] height = pic.size[ 1 ] for i in range( 0 ,width): for j in range( 0 ,height): c_RGB = pic.getpixel((i,j)) #获取该像素所对应的RGB值 if c_RGB[ 0 ]+c_RGB[ 1 ]+c_RGB[ 2 ]> 0 : #白色 path.write( '0' ) elif c_RGB[ 0 ]+c_RGB[ 1 ]+c_RGB[ 2 ]== 0 : #黑色

Python程序员面试算法宝典---解题总结: 第9章 大数据 9.1 如何从大量的url中找出相同的url

淺唱寂寞╮ 提交于 2019-12-08 17:47:27
# -*- coding: utf-8 -*- ''' Python程序员面试算法宝典---解题总结: 第9章 大数据 9.1 如何从大量的url中找出相同的url 题目: 给定a,b两个文件,各存放50亿个url,每个url各占64B,内存限制是4GB,请找出a、b两个文件 共同的url。 分析: 海量数据处理方法有: hash(字典),位图,布隆过滤器,倒排索引,数据库优化,外部排序,Trie数,堆, 双层桶,MapReduce。 重点: 哈希,位图,Trie树,堆。 50亿个url占据=50亿*64B = 50 0000 0000 * 64 B = 3200 0000 0000 = 3200 00000 KB = 320000 MB = 320GB 实际只有4GB,显然不能将所有数据全部放入内存。 4GB可以存放=4GB/64B = 4 * 2^30 / 2^6 = 2^5 M = 32* 2^20个url。 考虑用分治法,计算每个url的哈希值,将哈希值相同的url存入同一个文件中。 为了能让内存中可以放得下,可以考虑平均每个文件大约600MB, 这样a,b中相同哈希值划分得到的文件总共内存大约1.2GB,然后寻找这两者共同url 最多1.2GB,这样可以控制整个内存占用最多不超过2.4GB。 关键: 1 书上解法 步骤1: 计算每个url的哈希值hash,然后用 hash

python算法

只愿长相守 提交于 2019-12-08 12:10:34
1、给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 注:首先想到的解决办法是将数组转化成int类型进行加1运算,但是此方法存在越界限制,操作系统为64和32位操作系统,int类型数字有可能超限,此方法放弃 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/plus-one 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 方法一:(逆序)先将数组元素取反,然后从最低进行判断,若判断位置为不为9时,该位加1;为9时此位数置0,并对下一位进行判断 def plusOne(self, digits: [int]) -> [int]: digits1 = list(reversed(digits)) for i in range(0,len(digits1),1): if digits1[i] != 9: digits1[i] += 1 print(i) return list(reversed(digits1)) digits1[i] = 0 digits1[len(digits1)-1]=0 digits1.append(1) return list(reversed