python算法

Python的简单实现与部分库使用

余生长醉 提交于 2019-11-30 07:46:13
蟒蛇绘制 import turtle #引入绘图库 turtle.setup(650,350,200,200) #不是必需的,对窗口有要求时设置即可 #turtle.setup(width,height,startx,starty),括号内前两者设置窗口大小,后两者是相对屏幕坐标原点的窗口坐标 turtle.penup() #拿起画笔,画布不显示痕迹。海龟默认位置在画布中央 turtle.fd(-250) turtle.pendown() #放下画笔,画布显示痕迹 turtle.pensize(25) #画笔宽度,pensize可换成 width turtle.pencolor("purple") #可用颜色字符串(小写)或 RGB小数值或 RGB元组值(小数值的括号外再加一层括号)设置 turtle.seth(-40) for i in range(4): # i默认从0开始 # range(N) 产生0到 N-1的整数序列 # range(M,N) 产生 M到 N-1的整数序列 turtle.circle(40,80) turtle.circle(-40,80) turtle.circle(40,80/2) turtle.fd(40) turtle.circle(16,180) turtle.fd(40*2/3) turtle.done() #程序运行完后不能自动退出

python之路——进程

情到浓时终转凉″ 提交于 2019-11-30 07:35:22
python之路——进程 阅读目录 理论知识 操作系统背景知识 什么是进程 进程调度 进程的并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 在python程序中的进程操作 multiprocess模块 进程的创建和multiprocess.Process 进程同步控制 —— 锁 进程间通信 —— 队列 进程间的数据共享 —— multiprocess.Manager] 进程池和multiprocess.Pool 理论知识 操作系统背景知识 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。 所以想要真正了解进程,必须事先了解操作系统,点击进入 PS:即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力。将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在。 必备的理论基础: #一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理、调度进程,并且将多个进程对硬件的竞争变得有序 #二 多道技术: 1.产生背景:针对单核,实现并发 ps: 现在的主机一般是多核

Python 数据分析学习路线

六眼飞鱼酱① 提交于 2019-11-30 06:23:59
Python 数据分析学习路线 相关资料 概述 数据分析: 数据分析是指用适当利用统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。 分析数据,得到结果 学习路线 基础部分: 数学知识 Python基础知识 Python数据分析包使用 进阶部分: 网页爬虫 机器学习和深度学习 大数据 基础部分 数学 需要的知识主要为 《概率论与数理统计》 Python基础知识 由于只需要掌握计算部分的知识,Python 的基础知识需要了解以下内容: 基本语法 数据类型和变量 条件语句和循环语句 函数和模块的概念 Python数据分析包 主要掌握 Python 相关数据分析包的使用,三剑客: numpy pandas matplotlib 参考的书为《利用 Python 进行数据分析》 进阶部分 网页爬虫 《Python3网络爬虫开发实战》崔庆才 机器学习和深度学习 学习SQL,这是数据分析最基础的能力 大体上掌握各类算法原理以及如何利用机器学习包 理论书籍: 《机器学习》, 周志华 《统计学习方法》, 李航 机器学习包: scikit-learn 是一个机器学习库,可以对数据进行分类,回归,无监督,数据降维,数据预处理等等,包含了常见的大部分机器学习方法。 深度学习就是各种神经网络如何解算的问题。 大数据 Hadoop 权威指南 来源: https

Python系列(四)python元组与字典

我只是一个虾纸丫 提交于 2019-11-30 05:54:25
本文目录: 一、元组 | 二、字典 | 三、字典的使用方法 前言:列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一些列不可修改的元素,元组就可以满足你这样的需求。Python将不能修改的值称为不可变的,而不可变的列表就被称为元组。 正文部分: 一、元组 1、元组的概念 元组:(tuple),有序列表叫元组,tuple和list非常类似,不同之处是list列表可以修改元素,而元组是无法修改定义好的元素的。 元组使用“()”小括号来定义。 定义元组后,就可以使用索引来访问其元组,就像访问列表元素一样。 元组的类型是“tuple”。 xidamingzhu这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用xidamingzhu[0],xidamingzhu[-1],但不能赋值成另外的元素。 那不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。 如果要定义一个空的tuple,可以写成(): 但是,要定义一个只有1个元素的tuple,如果你这么定义: 那么这定义的不是tuple,而是1这个整数,这是因为小括号()既可以表示tuple

Python需要安装哪些工具包?

佐手、 提交于 2019-11-30 04:29:09
python要装多少包,这个要取决于你用python做什么工作了,基本上,在每一个应用方向都有专业的包。 python自带了许多功能强大的包,比如:爬虫包urllib,正则表达式包re,计算包collections,还有图形包tkinter等等,这些包在你安装python的时候就已经自动安装了,当然,这都是基础的包,我们日常用到的更多的是第三方包,因为第三方包功能更为强大。 作为数据挖掘人员,我先说一下日常用到的框架或者说模块。 python本来自身是没有很好的数据处理能力的,因为的他的基本数据结构就是那几种,列表,字典,集合,元组等,无法使用到高维数组,更没有提供矩阵运算的能力,但是!第三方库numpy的出现,使python具备了处理数据和矩阵的能力,然后在此基础上,出现更友好的处理数据的库,scipy,pandas,这些都是基于numpy库而来的,当然还有机器学习库scikit-learn,这个模块提供了强大的全面的机器学习算法,而且接口相对十分简单,让数学或者统计学工作者能很快上手。 所以,一个数据挖掘人员,日常使用就是这些:numpy,scipy,pandas,scikit-learn,还有数据可视化包matplotlib,这些日常处理数据,构建模型,结果可视化必备的工具。 但是这么多包,他们之间又有相互依赖,一个个的安装是个大问题,这里推荐安装anaconda

Strassen算法及其python实现

倖福魔咒の 提交于 2019-11-30 04:22:51
题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法。 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p。 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了:      下面咱们来具体解决这个矩阵相乘的问题。 解法一、暴力解法 其实,通过前面的分析,我们已经很明显的看出,两个具有相同维数的矩阵相乘,其复杂度为O(n^3),参考代码如下: 1 //矩阵乘法,3个for循环搞定 2 void Mul(int** matrixA, int** matrixB, int** matrixC) 3 { 4 for(int i = 0; i < 2; ++i) 5 { 6 for(int j = 0; j < 2; ++j) 7 { 8 matrixC[i][j] = 0; 9 for(int k = 0; k < 2; ++k) 10 { 11 matrixC[i][j] += matrixA[i][k] * matrixB[k][j]; 12 } 13 } 14 } 15 } 解法二、Strassen算法 在解法一中

python 十大经典排序算法

只愿长相守 提交于 2019-11-30 03:32:30
python 十大经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序。 O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序。 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 名词解释: n:数据规模 k:“桶”的个数 In-place:占用常数内存,不占用额外内存 Out-place:占用额外内存 稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成

python排序方法,冒泡排序法代码实现

爱⌒轻易说出口 提交于 2019-11-30 03:16:51
1. Python自带的对列表排序的方法:sort(), sorted(), reverse(); c=[6,5,4,3,2,1] c.sort() #永久排序 c.reverse() #反转排序 print(sorted(c)) #sorted临时排序 print(c) 程序运行结果 [1, 2, 3, 4, 5, 6] [6, 5, 4, 3, 2, 1] 2. 冒泡排序(Bubble sort) -常见的快速排序算法 非常好的理解冒泡排序的文章参考: http://bubkoo.com/2014/01/12/sort-algorithm/bubble-sort/ Python 脚本实现: 算法过程: 第一步:从第一个数开始,两两交换将最大的数往后移,第一次所有数字全部两两交换后,序列里最大的数字将会移到最后面;例子如下: c=[6,5,4,3,2,1]#把序列c从小到大排序 """第一步:每两个数两两交换,最终将最大的数字移到最后""" for i in range(0,len(c)-1): if c[i]>c[i+1]: c[i],c[i+1]=c[i+1],c[i] print(c) print(c) 程序运行结果: [5, 6, 4, 3, 2, 1] #前两个数两两交换 [5, 4, 6, 3, 2, 1] #第2个第3个数两两交换 [5, 4, 3, 6, 2, 1

Python与C/C++相互调用(转)

微笑、不失礼 提交于 2019-11-30 02:18:21
原文链接 作者 一、问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结。 二、Python调用C/C++ 1、Python调用C动态链接库 Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。 (1)C语言文件:pycall.c /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> int foo(int a, int b) { printf("you input %d and %d\n", a, b); return a+b; } (2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译。 (3)Python调用动态库的文件:pycall.py import ctypes ll = ctypes.cdll.LoadLibrary lib = ll("./libpycall.so") lib.foo(1, 3) print '***finish***' (4)运行结果: 2、Python调用C++(类

Python垃圾回收机制!非常实用

自古美人都是妖i 提交于 2019-11-30 02:16:21
python作为一门解释型语言,以代码简洁易懂著称。我们可以直接对名称赋值,而不必声明类型。名称类型的确定、内存空间的分配与释放都是由python解释器在运行时进行的。python这一自动管理内存功能极大的减小了程序员负担,这也是成就python自身的重要原因之一。所以,这一篇文章我们就聊一聊python的内存管理。 引用计数 Python中,主要通过**引用计数(Reference Counting)**进行垃圾回收。 typedef struct_object { int ob_refcnt; struct_typeobject *ob_type; } PyObject; 在Python中每一个对象的核心就是一个结构体PyObject,它的内部有一个引用计数器(ob_refcnt)。程序在运行的过程中会实时的更新ob_refcnt的值,来反映引用当前对象的名称数量。当某对象的引用计数值为0,那么它的内存就会被立即释放掉。 以下情况是导致引用计数加一的情况: 对象被创建,例如a=2 对象被引用,b=a 对象被作为参数,传入到一个函数中 对象作为一个元素,存储在容器中 下面的情况则会导致引用计数减一: 对象别名被显示销毁 del 对象别名被赋予新的对象 一个对象离开他的作用域 对象所在的容器被销毁或者是从容器中删除对象 我们还可以通过sys包中的getrefcount(