赞
踩
通过dict()函数转换,或者通过dict.fromkeys来创建:
dict([['today',20],['tomorrow',30]]) #也相当于{'today':20,'tomorrow':30}
dict.fromkeys(['today','tomorrow'],20) #相当于{'today':20,'tomorrow':20}
和数学概念上的集合基本上是一致的。它与列表的区别:
a.在于它的元素的不重合的,而且是无序的;
b.它不支持索引。
一般我们用大括号{}或者set()来创建集合。
s={1,2,2,3} #2会自动去重,得到{1,2,3} s=set([1,2,2,3]) #同样会将列表转换为集合,得到{1,2,3}
集合的运算:
a = t | s #并集
b = t & s #交集
c = t - s #差集(项在t中,但不在s中)
d = t ^ s #对称差集(项在t或s中,但不会同时出现在二者中)
函数式编程主要由几个函数构成:lambda()、map()、reduce()、filter()
a、lambda():主要用来定义“行内函数”
b、map():类似于列表解析,例如:列表解析可以这样写 b =[i+2 for i in a],但是利用map函数我们可以这么写:
a=[1,2,3]
b =map(lambda x: x+2,a)
b=list(b)
print(b) #结果是[3,4,5]
注:在3.x需要b = list(b)这一步,在2.x就不需要。是因为在3.x中map函数进进是创建一个待运行的命令容器,只有其他函数调用它的时候才会返回结果。
map()也接受多参数的函数,如map(lambda x,y:x*y,a,b) 表示将a、b两个列表的元素对应相乘,把结果返回给新列表。map()命令和for循环的对比:列表解析本身还是for命令,在Python中for命令的执行效率不高,而map函数实现了相同的功能,而效率更高
c、reduce()函数:与map函数类似,map()用于逐一遍历,reduce()函数用于递归计算。例如:
reduce(lambda x,y : x\*y,range(1,n+1)) #可以计算n的阶乘
注:在2.x中,上述命令可以直接运行,在3.x中,reduce函数已经被移除了全局命名空间,置于fuctools库中,可通过from fuctools import reduce引入reduce。
上述代码也可用循环语句写成:
s=1
for i in range(1,n+1):
s=s\*i
d、filter()函数:它是一个过滤器,用于筛选列表中符合条件的元素。例如:
b=filter(lambda x : x>5 and x<8,range(10))
b=list(b)
print(b) #结果为[6, 7]
上述语句也可以用列表解析写出:
b=[i for i in range(10) if i>5 and i<8]
我们使用map()、reduce()、filter()最终的目的是兼顾简洁和效率,因为map()、reduce()、filter()的循环速度比Python内置的while和for循环快的多。
import math
math.sin(1) #计算正弦
math.exp(1) #计算指数
math.pi #内置的圆周率常数
重命名库:
import math as m
m.sin(1)
指定导入某个函数:
from math import exp as e
e(1) help('modules') #获得已安装的所有模块名
使用2.x的用户可以通过引入futurn特征的方式兼容代码,如:
#将print变成函数形式,即用print(a)的方式输出:
from __futurn__ import print_function
#3.x的3/2=1.5,3//2=1;2.x的3/2=1
from __futurn__ import division
以安装pandas为例:
打开cmd,输入 pip install pandas,点击回车即可
Python并没有提供真正的数组功能,而numpy则提供了真正的数组功能,它还是很多更高级库的依赖库,,例如scipy、matplotlib、pandas等。numpy内置函数的处理速度是C语言级别的,因此在编写函数的时候应当尽量的使用它们内置的函数,避免出现效率瓶颈的问题(尤其是涉及循环问题)。
安装numpy:
pip install numpy #在Windows中可以像安装其他第三方库一样用pip完成 python setup.py install #Windows还可自行下载源代码,然后用此代码安装 sudo apt-get install python-numpy #在Linux的Ubuntu下安装
numpy的基本操作:
#-\*- coding :utf-8 -\*
import numpy as np #一般用np作为numpy的别名
a = np.array([2,0,1,5]) #创建数组
print(a) #打印结果
print(a[:3]) #引用前3个数字(切片)
print(a.min()) #输出a的最小值
a.sort() #将a的元素从小到大排列,此操作直接修改a,print(a)为[0,1,2,5]
print(a)
b = np.array([[1,2,3],[4,5,6]]) #创建二维数组
print(b\*b) #输出数组的平方阵[[1,4,9],[16,25,36]]
numpy官网:http://www.numpy.org/或者http://reverland.org/python/2012/08/12/numpy/
SciPy包含的功能有最优化、线性代数、几份、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。SciPy依赖于numpy,因此安装它之前需要先安装numpy,安装scipy和安装numpy在Windows平台上是一样的,直接用pip进行安装即可,sudo apt-get install python-scipy 在Linux的Ubuntu下安装。
SciPy求解非线性方程组和数值积分:
#-\*-coding:utf-8 -\* #求解非线性方程组2x1-x2^2=1,x1^2-x2=2 from scipy.optimize import fsolve #导入求解方程组的函数 def f(x): #定义要求解的方程组 x1=x[0] x2=x[1] return [2\*x1-x2\*\*2-1,x1\*\*2-x2-2] result = fsolve(f,[1,1]) #输出初值[1,1]并求解 print(result) #数值积分 from scipy import integrate #导入积分函数 def g(x): #定义被积函数 return (1-x\*\*2)\*\*0.5 pi_2,err = integrate.quad(g,-1,1) #积分结果和误差 print(pi_2\*2) #有微积分知识知道积分结果为圆周率pi的一半
主要用于绘制二维图,也可以进行简单的三维绘图。安装方法也和上述两个库的安装方法一致。
注:matplotlib对上级库的依赖较多,手动安装的时候需要吧这些库也逐一安装完成
matplotlib绘图的基本代码:
#-\*-coding:utf-8 -\* import numpy as np import matplotlib.pyplot as plt #导入matplotlib x = np.linspace(0,10,1000) #作图的变量自变量 y = np.sin(x)+1 #因变量y z = np.cos(x\*\*2)+1 #因变量z plt.figure(figsize=(8,4)) #设置图像大小 plt.plot(x,y,label= '$\sin x+1$',color='red',linewidth=2) #作图,设置标签,线条颜色,线条大小 plt.plot(x,z,'b--',label='$\cos x^2+1$') #作图,设置标签,线条类型 plt.xlabel('Time(s)') #X轴名称 plt.ylabel('Volt') #Y轴名称 plt.title('A Simple Example') #标题 plt.ylim(0,2.2) #显示Y轴范围 plt.legend() #显示图例 plt.show()
做出来的图如下:
以上代码做出来的图
如果使用的是中文标签,会发现中文标签无法正常显示。这是由于matplotlib的默认字体是英文导致的,解决办法是在作图之前手动将默认字体设置为中文字体,如黑体(SimHei):
plt.rcParams['font.sans-serif']=['SimHei'] #这句用来正常显示中文字体
如果保存图像负号不显示则可以用以下代码解决:
plt.rcParams['axes.unicode\_minus']=False #解决保存图像是负号“-”显示为方块的问题
建议:有空多去matplotlib提供的“画廊”欣赏他做出来的漂亮效果,链接如下:https://matplotlib.org/gallery.html
pandas是Python下最强大的数据分析和探索工具,pandas构建在numpy之上,使得以numpy为中心的应用很容易使用。pandas的功能非常强大,支持类似于SQL的增删改查,并带有丰富的数据处理函数。支持时间序列分析功能;支持灵活处理缺失数据等。
安装方法和以上的库均一样,但是在使用pandas之前需要先安装numpy才能使用。pandas本身是不支持Excel文件的读写的,需要安装xlrd(读)和xlwt(写)库才能支持Excel的读写。
pandas基本的数据结构是Series和DataFrame,Series是序列类似一堆数组;DataFrame则是相当于一张二维的表格,类似于二维数组,它的每一列就是一个Series。为了定位Series中的元素,pandas提供了Index对象,每个Series都会带有一个对应的Index,用来标记不同的元素。Index类似于SQL中的主键DataFrame相当于对个带有Index的Series的组合(本质是Series的容器),每一个Series都带有唯一的表头,用来标识不同的Series。
#-\*-coding:utf-8 -\*
import pandas as pd #通常用pd作为pandas的别名
s = pd.Series([1,2,3],index = ['a','b','c']) #创建一个序列s
d = pd.DataFrame([[1,2,3],[4,5,6]],columns=['a','b','c']) #创建一个表
d2 = pd.DataFrame(s) # 也可以用已有的序列来创建表格
print(d.head()) #预览前5行数据,3.x版本需要加上print
print(d.describe()) #数据的基本统计量,3.x版本需要加上print
#读取文件,注意文件的路径不能有中文,否则读取可能出错
pd.read_excel('data.xls') #读取Excel文件,创建DataFrame
pd.read_csv('data.csv',encoding='utf-8') #读取文本格式的数据,一般用encoding指定编码
相比于pandas而言,StatsModels更加注重数据的统计建模分析,使得Python有了一丝R语言的味道。StatsModels支持与pandas进行数据交互,与pandas进行组合,成为了Python下强大的数据挖掘组合。StatsModels依赖于pandas,也依赖于pandas所依赖的,同时还依赖于pasty(一个描述统计的库)。
使用StatsModels来进行ADF平稳性检验的例子:
#-\*-coding:utf-8 -\*
from statsmodels.tsa.stattools import adfuller as ADF #导入ADF检验
import numpy as np
print(ADF(np.random.rand(100))) #返回的结果是ADF值、p值等
Scikit-Learn是Python下的一个强大的机器学习包,提供了完善的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测、和模型分析等。Scikit-Learn依赖于numpy、SciPy、matplotlib,因此只要提前安装好这几个库然后按照Scikit-Learn基本上没有什么问题,安装方法和之前一样。
使用Scikit-Learn创建一个机器学习的模型:
#-\*-coding:utf-8 -\*
from sklearn.linear_model import LinearRegression #导入线性回归模型
model=LinearRegression() #建立线性回归模型
print(model)
Scikit-Learn本身提供了一些实例数据,比如常见的有安德森鸢尾花卉数据集、手写图像数据集等。
#-\*-coding:utf-8 -\*
from sklearn import datasets #导入数据集
iris=datasets.load_iris() #加载数据集
print(iris.data.shape) #查看数据集大小
from sklearn import svm #导入SVM模型
clf = svm.LinearSVC() #建立线性SVM分类器
clf.fit(iris.data,iris.target) #用数据训练模型
clf.predict([[5.0,3.6,1.3,0.25]]) #训练好模型后,输入新的数据进行预测
print(clf.coef_) #查看训练好的模型的参数
本书用Keras来搭建神经网络,但是Keras并不只是神经网络库,而是一个基于Theano的强大的深度学习库,还可以利用它搭建自编码器、循环神经网络、递归神经网络、卷积神经网络等,由于基于Theano,因此速度也很快。Keras大大的简化了搭建神经网络的难度,允许普通用户轻松地搭建并求解具有几百个输入节点的深层神经网络,而且定制的自由度非常大。
安装Keras之前需要安装numpy、SciPy和Theano,安装Theano需要先准备一个C++编译器,这在Linux下是自带的,所以在Linux上安装是相对简单一些的,而在Windows上则需要先安装MinGW(Windows下的GCC和C++),然后再安装Theano,最后安装Keras。如果需要实现GPU加速则需要安装和配置CUDA。值得一提的是在windows下Keras会大打折扣,因此想要在神经网络和深度学习方面进行深入研究,请在Linux下搭建相应的环境。
简单搭建一个MLP(多层感知器),如下:
#-\*-coding:utf-8 -\* from keras.models import Sequential from keras.layers.core import Dense,Dropout,Activation from keras.optimizers import SGD model = Sequential() #模型初始化 model.add(Dense(20,64)) #添加输入层20个节点,第一隐藏层64个节点的连接 model.add(Activation('tanh')) #第一隐藏层用tanh作为激活函数 model.add(Dropout(0.5)) #使用Dropout防止过拟合 model.add(Dense(64,64)) #添加第一隐藏层64节点,第二隐藏层64节点连接 model.add(Activation('tanh')) #第二隐藏层用tanh作为激活工具 model.add(Dropout(0.5)) #使用Dropout防止过拟合 model.add(Dense(64,1)) #添加第二隐藏层64节点,输出层1节点连接 model.add(Activation('sigmoid')) #输出层用sigmoid作为激活函数 如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费**学习**大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。 ### 一、Python所有方向的学习路线 Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。 ![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png) ### 二、学习软件 工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。 ![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png) ### 三、全套PDF电子书 书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。 ![](https://img-blog.csdnimg.cn/img_convert/eec417a3d4d977b313558a11d3c13e43.png) ### 四、入门学习视频 我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。 ![](https://img-blog.csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png) ![](https://img-blog.csdnimg.cn/img_convert/3eaeaa6747419c9d86c72e0d10d0a6a2.png) ### 四、实战案例 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 ![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png) ### 五、面试资料 我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 ![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png) 成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功! 最后祝你好运!!! **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。