![](https://img-blog.csdnimg.cn/20191219140945731.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
编程之美:Python
文章平均质量分 58
一些关于python的入门和进阶知识
图灵的猫.
给行业以ai,而不是给ai以行业
展开
-
再见,Python2。你好,Python3
Python2的退场,意味着一个时代的结束我们这一代程序员基本都接触过python2,很多人也是从python2时代一路走来的。但是,是时候说再见了。虽然Python之父两年前就已宣布 Python 2.7将于2020年1月1日终止支持,但是关于版本的争论从未停止。现在,python2停止更新的这一天已到来,亦即意味着开发者将不会再接收到任何来自Python 2.7的错...原创 2020-01-02 21:31:39 · 1077 阅读 · 0 评论 -
matplotlib无法显示图片的解决方法(non-gui backend)
Windows下解决方案应该是一样的(只是配置文件位置不同),还没有使用Windows跑过,请自行Google。(其中,~/.config/matplotlib/是配置文件matplotlibrc的路径)原创 2018-07-03 13:14:30 · 34375 阅读 · 2 评论 -
Python2和Python3的区别,以及为什么选Python3的原因
其次,Python 2和Python 3确实有一些差异,但是,并没有大家想象的那么大,Python 2和Python 3之间的差异不到Python语法的10%,我们可以快速地了解哪些Python 2里面的语法在Python 3中已经被弃用,在我们写代码的过程中,规避掉这一部分语法即可。所以,如果你说,我一开始学的就是Python 3,Python 3也是Python的未来,我不想去了解和学习Python 2。所以,学习Python,想直接抛弃Python 2学习Python 3,几乎是不可能的事情。原创 2018-06-29 12:28:13 · 183155 阅读 · 30 评论 -
什么是元编程(meta-promgramming)?
抠定义的话是这样吧。除非程序的运行期的输入数据会被直接或间接转化成代码,否则元编程不会给程序带来新的逻辑(信息论原理),此时它本质上是一种(让程序员自我感觉良好的)手工压缩源代码技术。换言之,一种语言本来做不到的事情,通过你编程来修改它,使得它可以做到了,这就是元编程。泛泛来说,只要是与编程相关的编程就算是 meta-programming 了——比如,若编程甲可以输出 A - Z,那么写程序甲算「编程」;相对于新创造的领域专用语言DSL来说, Ruby语言就成为其的元语言,所以叫做元编程。原创 2018-05-24 12:30:52 · 6931 阅读 · 1 评论 -
Python中stack(),vstack(),hstack()的用法和区别
那么我们就把1和4放一起,2和5放一起,3和6放一起,变成[ 1,4 ,2,5 ,3,6 ]然后把箱子A,B,C分别套在1,4 , 2,5 , 3,6的外面,变成[ [1,4] , [2,5] , [3,6] ]这就是程序中axis=1的时候程序的输出结果。看做是箱子A,这个箱子A也会套在[4,5,6]的外面,所以我们就先把[1,2,3]和[4,5,6]放在一起,变成[1,2,3],[4,5,6],然后再一起套上箱子A,变成[ [1,2,3],[4,5,6] ]这就是当axis=0的时候程序的输出结果。原创 2018-05-27 15:28:53 · 20390 阅读 · 3 评论 -
如何在Python中实现尾递归优化
一般递归123456def(n):n==1:1:n+(n-1)执行:12345678910(5)5+(4)5+4+(3)5+4+3+(2)5+4+3+2+(1)5+4+3+35+4+65+1015。原创 2018-04-27 20:07:22 · 5688 阅读 · 0 评论 -
Python—什么是duck type鸭子类型
a=A()时,a是一个A类型的引用,我们可以说a是A类型的,如果再将a赋值3,a=3,此时a就是一个整型的引用,但python并不是弱类型语言,在python中'2'+3会报错,而在php中'2'+3会得到5。a,b,c,d都是A类型的变量,所以可以得到预期的效果(从java角度的预期),e并不是A类型的变量但是根据鸭子类型,走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子,e有prt方法,所以在test方法中e就是一个A类型的变量,f没有prt方法,所以f不是A类型的变量。原创 2018-04-20 17:19:51 · 5205 阅读 · 0 评论 -
Python中的*self,*self._args, **kwargs
可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误。在python中,有些常见方法参数是:*self._args, **kwargs,如:self._target(*self._args, **self._kwargs)。原创 2018-04-30 20:34:47 · 23650 阅读 · 1 评论 -
在Windows下正确安装Scipy与Numpy
这么多包,到底哪个才是我们需要的呢?关于包的名称的含义就不重复了,根据需要进行下载了。下载成功之后,我们进入包的存放路径,使用 pip install numpy-1.12.0+mkl-cp27-cp27m-win_amd64.whl 命令进行安装(默认的安装路径为:C:\Python2.7.13-64\Lib\site-packages)使用pip在线安装的scipy的时候,不清楚为什么下载的是32位的,所有还是在这个非官方的网站下载了(我们这个时候也可以看到,它明确说明了需要先安装numpy+mkl)原创 2018-04-13 15:31:15 · 24331 阅读 · 2 评论 -
Python出现‘ascii‘ codec can‘t encode characters...的解决方法
以前没怎么见过这个错误,索性上网查了查,发现一个简单的方法,把这个好方法贴出来分享。今天做新闻文本挖掘的时候导入某个文件,代码运行后提示。第二部,重新载入SYS模块并设置uft-8。原创 2018-04-12 21:21:41 · 68512 阅读 · 11 评论 -
机器学习实战系列(五):SVM支持向量机
课程的所有数据和代码在我的Github:Machine learning in Action,目前刚开始做,有不对的欢迎指正,也欢迎大家star。除了 版本差异,代码里的部分函数以及代码范式也和原书不一样(因为作者的代码实在让人看的别扭,我改过后看起来舒服多了)。在这个系列之后,我还会写一个scikit-learn机器学习系列,因为在实现了源码之后,带大家看看SKT框架如何使用也是非常重要的...原创 2018-07-10 13:36:39 · 1571 阅读 · 1 评论 -
Python-Scikit learn保存机器学习训练的模型
在做模型训练的时候,尤其是在训练集上做交叉验证,通常想要将模型保存下来,然后放到独立的测试集上测试,下面介绍的是Python中训练模型的保存和再使用。scikit-learn已经有了模型持久化的操作,导入joblib即可。原创 2018-07-17 23:56:01 · 1734 阅读 · 0 评论 -
《机器学习实战》UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xae in position 199
今天做贝叶斯这一章的时候出了这个问题,Python3版本的GBK不太跳BUG,所以我特意上网查了一下,发现是文档里的“?”符号出错,作者应该打成了非英语系的符号。根据decode byte 0xae in position 199看出来好像是文件中某个字节不能解码,经过好心人的查找,是HAM的第23个文件出问题了。原创 2018-07-06 21:20:27 · 9954 阅读 · 4 评论 -
Python机器学习基础教程(一):简介
关于这本书,其实就是一个非常实用的scikit-learn使用教程,比官方文档讲的要好而且是中文翻译,基本上机器学习该用到的库都讲到了。建议大家在阅读前至少掌握入门级的机器学习算法知识,因为这本书不讲算法和数学,只教你用Sklearn调参和模型权衡。原创 2018-08-02 19:13:46 · 6315 阅读 · 0 评论 -
异常检测算法:孤立森林(Isolation Forest)
比如常用的统计方法,基于分类的方法,和基于聚类的方法,这些传统算法通常是对正常的数据构建一个模型,然后把不符合这个模型的数据,认为是异常数据。预测的过程就是把测试数据在iTree树上沿对应的条件分支往下走,直到达到叶子节点,并记录这过程中经过的路径长度h(x),即从根节点,穿过中间的节点,最后到达叶子节点,所走过的边的数量(path length)。从上面的评价中来看,iForest算法在实际的应用中应该具有不错的效果,得益于随机森林的思想,能快速处理大规模的数据,在当前的大数据环境下,应该很受欢迎。原创 2018-08-01 13:24:36 · 25361 阅读 · 2 评论 -
机器学习实战系列(八):分类与回归树
课程的所有数据和代码在我的Github:Machine learning in Action,目前刚开始做,有不对的欢迎指正,也欢迎大家star。除了 版本差异,代码里的部分函数以及代码范式也和原书不一样(因为作者的代码实在让人看的别扭,我改过后看起来舒服多了)。在这个系列之后,我还会写一个scikit-learn机器学习系列,因为在实现了源码之后,带大家看看SKT框架如何使用也是非常重要的。 ...原创 2018-07-26 22:17:40 · 827 阅读 · 0 评论 -
python DataFrame获取行数、列数、索引及第几行第几列的值
print df.ix[[0]].values[0][0]#第一行第一列的值。print df.ix[[1]].values[0][1]#第二行第二列的值。print df.ix[[0]].index.values[0]#索引值。print df.iloc[:,0].size#行数。print df.columns.size#列数。原创 2018-07-15 13:30:17 · 25297 阅读 · 0 评论 -
Python中DataFrame按照行遍历
在做分类模型时候,需要在DataFrame中按照行获取数据以便于进行训练和测试。原创 2018-07-15 13:29:15 · 2635 阅读 · 0 评论 -
python中计算DataFrame,Series的数据频率
我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~在pa...原创 2018-07-15 13:26:51 · 8901 阅读 · 0 评论 -
机器学习实战系列(七):数值回归与预测
课程的所有数据和代码在我的Github:Machine learning in Action,目前刚开始做,有不对的欢迎指正,也欢迎大家star。除了 版本差异,代码里的部分函数以及代码范式也和原书不一样(因为作者的代码实在让人看的别扭,我改过后看起来舒服多了)。在这个系列之后,我还会写一个scikit-learn机器学习系列,因为在实现了源码之后,带大家看看SKT框架如何使用也是非常重要的...原创 2018-07-14 15:18:49 · 2393 阅读 · 1 评论 -
机器学习实战系列(六):Adaboost提升法
目前刚开始做,有不对的欢迎指正,也欢迎大家star。除了 版本差异,代码里的部分函数以及代码范式也和原书不一样(因为作者的代码实在让人看的别扭,我改过后看起来舒服多了)。在这个系列之后,我还会写一个scikit-learn机器学习系列,因为在实现了源码之后,带大家看看SKT框架如何使用也是非常重要的。Adaboost提升算法是机器学习中很好用的两个算法之一,另一个是SVM支持向量机;机器学习面试中也会经常提问到Adaboost的一些原理;原创 2018-07-13 13:56:26 · 765 阅读 · 0 评论 -
《机器学习实战》原书数据与代码(基于Python3)汇总
这次做的系列是《机器学习实战》,原书比较久远了,且代码和练习都是基于Python2,我个人是升级到了Python3,因此使用最新的版本来写这些习题。具体2和3其实在基础语法上并没有太多差别,一些高级特性比如装饰器工厂,协程,IO等Python3的新用法,一般机器学习也用不上,因为追求性能的话都会用C/C++等语言去实现,Python只是小规模的测试用。除了版本差异,代码里的部分函数以及代码范式也和原书不一样(因为作者的代码实在让人看的别扭,我改过后看起来舒服多了)。原创 2018-07-13 12:16:46 · 21381 阅读 · 6 评论 -
深入浅出Python的抽象基类
不同于Java或是C++,python中并没有直接提供ABC,Abstract Base Class(抽象基类)与抽象方法,但是提供了内置模块abc(abstract base class)来模拟实现抽象类。可以通过abc将基类声明为抽象类的方式,然后注册具体类作为这个基类的实现。抽象基本类的几大特点:1:要定义但是并不完整的实现所有方法2:基本的意思是作为父类3:父类需要明确表示出那些方法的特征,这样在写子类时更加简单明白用抽象基本类的地方:1:用作父类。原创 2018-04-05 20:11:23 · 5689 阅读 · 4 评论 -
python中的struct
struct是python(包括版本2和3)中的内建模块,它用来在c语言中的结构体与python中的字符串之间进行转换,数据一般来自文件或者网络。原创 2018-04-05 19:08:28 · 737 阅读 · 0 评论 -
Python数据分析:手把手教你用Pandas生成可视化图表
大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事。但自从Python进入3.0时代以后,pandas的使用变得更加普及,它的身影经常见于市场分析、爬虫、金融分析以及科学计算中。作为数据分析工具的集大成者,pandas作者曾说,pandas中的可视化功能比plt更加简便和功能强大。实际上,如果是对图表细节有极高要求,那么建议大家使用matplotlib通过底层图表模块进行编码。原创 2018-03-16 18:56:32 · 53812 阅读 · 3 评论 -
Python数据分析:pandas中Dataframe的groupby与索引
Series和DataFrame都是有索引的,索引的好处是快速定位,在涉及到两个Series或DataFrame时可以根据索引自动对齐,比如日期自动对齐,这样可以省去很多事。原创 2018-03-15 21:44:16 · 24659 阅读 · 0 评论 -
辨别Python中load和loads的小技巧
如使用json.dumps序列化的对象d_json=json.dumps({‘a‘:1, ‘b‘:2}),在这里d_json是一个字串‘{"b": 2, "a": 1}‘d=json.loads(d_json) #{ b": 2, "a": 1},使用load重新反序列化为dict,load针对文件句柄,如本地有一个json文件a.json则可以d=json.load(open(‘a.json‘))相应的,dump就是将内置类型序列化为json对象后写入文件。原创 2018-03-15 20:57:18 · 20200 阅读 · 0 评论 -
深度学习入门:手把手教你用TensorFlow搭建图像识别模块
之前和大家简单介绍了什么是神经网络(见我的文章:一句话告诉你什么是神经网络 )。那么今天再跟大家分享一些深度学习算法在图像识别上的应用。主要内容大概可以分为如下三个部分:● 深度学习介绍;● 神经网络工作原理;● 用 TensorFlow 实现图像识别。深度学习介绍我们知道深度学习现在是已经是一个非常热门的技术,那大家第一次听到这个深度学习的时候呢?很有可能就是因为去年这个时候 AlphaGo 战胜李世石的这个事情。当时这个事情获得了全社会的广泛关注和热烈讨论。但其实 AlphaGo 并不是第一个战胜人类的转载 2018-02-18 22:03:31 · 49290 阅读 · 5 评论 -
Python正则表达式:match(),search(),findall()与finditer()的用法
我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~一、模...原创 2018-03-06 19:13:01 · 28258 阅读 · 0 评论 -
用Python2编译Python3.X的代码: __future__ 模块
从单词含义上猜应该是“未来”的模块。它有下面几个目的避免和现有分析import工具混淆,并得到你期望的模块确保2.1之前的版本导入__future__产生运行时异常,因为2.1之前没有这个模块文档化不兼容的改变,通常这些改变会在新版中强制执行。这类文档以可执行的形式组织,通过导入__future__进行可编程式的检查。以上是对官方解释的粗略翻译,翻译起来感觉有些拗口。原创 2018-01-09 22:05:17 · 1034 阅读 · 0 评论 -
面向对象之Python的链表实现(二)循环链表
接上一章的练习,这里接着实现单链表的变型——传说中的循环单链表。给出一个简单的类,构造4个功能并实例化测试。在下一篇文章中将会关注一个比较tricky的问题:如何判断链表有环?原创 2018-01-24 21:51:06 · 532 阅读 · 0 评论 -
Python如何从一个文件中调用另一个文件的类
如果是在同一个 module中(也就是同一个py文件里),直接用就可以 如果在不同的module里,例如 a.py里有 class A: b.py 里有 class B: 如果你要在class B里用class A 需要在 b.py的开头写上 from a import A。如果你要在class B里用class A 需要在 b.py的开头写上 from a import A。类名要和文件名符合,且引用时要注意原始文件类的基类与派生类的关系。如果在不同的module里,例如。原创 2018-01-24 21:55:47 · 12177 阅读 · 0 评论 -
一文详解Python正则表达(3.X版本)
本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。当然对于爬虫来说,有了它,我们从HTML里面提取我们想要的信息就非常方便了。原创 2018-01-16 22:16:37 · 576 阅读 · 0 评论 -
一文详解Python中的*可变参数与**关键字参数
在Python中可以定义可变参数,顾名思义,可变参数就是传入参数是可变的。可以是任意个,以一个简单的数学编程为例,计算但是调用的时候必须定义一个元组或者列表。比如getsum([1,2,3])如果利用可变参数调用函数的方式可以变成这样的话就方便的多比如getsum(1,2,3)可以这么修改如果已经有一个list或者tuple,要调用一个可变参数怎么办?这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*原创 2018-01-15 23:02:09 · 9811 阅读 · 1 评论 -
Python中函数的形参与按值传递之间的关系
我对python还不够熟悉 , 但是从近两天的学习中发现 , 其存储模型与java相似 , 即变量中存储的是引用 , 是指向真正内容的内存地址(当然 ,java中的八大基本数据类型 , 变量名和值都是存储在堆栈中的 ) , 对变量重新赋值 , 相当于修改了变量副本存储的内存地址 , 而这时的变量已经和函数体外的变量不是同一个了, 在函数体之外的变量 , 依旧存储的是原本的内存地址 , 其值自然没有发生改变 .- 在函数体中改变变量指向的堆中的值 , 对函数外变量有效.原创 2018-01-22 22:09:15 · 799 阅读 · 0 评论 -
Python必知必会:Classethod与Staticmethod方法
经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法. 比如更改环境变量或者修改其他类的属性等能用到静态方法. 这种情况可以直接用函数解决, 但这样同样会扩散类内部的代码,造成维护困难.而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。类中最常用的方法是实例方法, 即通过通过实例作为第一个参数的方法。从它们的使用上来看,原创 2018-03-18 16:18:21 · 1180 阅读 · 2 评论 -
Python中的闭包与参数引用域
然后有位评论给出的见解我觉得非常厉害,他说,问题的产生是因为函数只在执行时才去获取外层参数i,若函数定义时可以获取到i,问题便可解决。而默认参数正好可以完成定义时获取i值且运行函数时无需参数输入的功能,所以在函数f()定义中改为f(m = i),函数f返回值改为m*m即可。是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为。的外部,因为它引用了。因此,改写后的函数应该为。原创 2018-03-29 20:49:45 · 1489 阅读 · 0 评论 -
python中变量的生命周期
这里涉及到一个python变量生命周期的问题。python能够改变变量作用域的代码段是def、class、lamda.最近在写python的时候发现一个好玩的现象,就是在if else重定义的变量,没有声明全局,在外部也可以使用,if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的。变量搜索路径是:本地变量->全局变量。原创 2018-04-16 21:58:28 · 4423 阅读 · 2 评论 -
3分钟tips:Python中的range与xrange
另外,xange也和普通的生成器略有不同,对于同一个xrange对象,对它进行多次迭代,每次都会从头开始,这里我自己也试了一下。这里就是很明显的类型上的不同了,range直接生成一个列表,xrange生成的是一个xrange对象。在其它场合,我觉得xrange完全可以取代range,这样你可以无需担心列表长度的问题。可以看到元素被生成出来之后就从生成器中剔除了,但是xrange有所不同。另外一个很明显的区别在与xrange不支持列表切片。迭代两次,每次都是从第一个元素开始....原创 2018-04-03 21:53:01 · 585 阅读 · 1 评论 -
Python生成器中的send()与next()方法解析
我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~在异步IO的使用时,gener...原创 2018-04-09 12:56:14 · 9394 阅读 · 3 评论