《SciPy-and-NumPy》中文精要

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、Introduction1.安装Numpy与SciPy(1)使用Python发行包常见的Python发行包:EnthoughtPythonDistribution(EPD)ActivePython(AP)Python(x,y)(2)PythonWindowsStep1:安装Python下载,64位操作系统选择Windowsx86_64MSIinstaller,32位操作系统选择Windowsx86MSIinstaller双击安装(最好选择默认路径)Step2:安装包管理器pipa.下载,选择pip-8.1.1.tar.gz,解压。大命令行进入dist\pip-8.1.1b.运行pythonsetup.pyinstallc.修改环境变量PATH,添加C:\Python27\ScriptsStep3:使用包管理器安装numpy、scipyNumPy和SciPy在windows下需要手动安装,否则容易出现意外的错误。过程如下a.从~gohlke/pythonlibs/下载相应whl包(下载python2.7版本cp27,32位下载win32,64位下载win_amd64)手动安装,手动安装注意依赖关系b.pipinstallwheelc.pipinstallxxxxx.whlStep4:安装其他包pipinstallpillowpipinstallpandaspipinstall-Uscikit-learnpipinstallmatplotlibpipinstallipythonpipinstallpyreadline(3)PythonOSXStep1:安装homebrew/usr/bin/ruby-e$(curl-fsSL)Step2:重新安装pythonbrewinstallpythonStep3:安装pipsudoeasy_installpipStep4:安装其他包pipinstallnumpypipinstallscipypipinstallpillowpipinstallpandaspipinstall-Uscikit-learnpipinstallmatplotlibpipinstallipython二、Numpy1.numpy数组与python列表效率对比importnumpyasnp#创建大小为10^7的数组arr=np.arange(1e7)larr=arr.tolist()deflist_times(alist,scalar):fori,valinenumerate(alist):alist[i]=val*scalarreturnalist#利用IPython的魔术方法timeit计算运行时间timeitarr*1.11loops,bestof3:76.9msperlooptimeitlist_times(larr,1.1)1loops,bestof3:2.03sperloop2.创建数组并设置数据类型(1)从列表转换alist=[1,2,3]arr=np.array(alist)(2)np.arange()arr=np.arange(100)arr=np.arange(10,100)(3)np.zeros()arr=np.zeros(5)np.zeros((5,5))cube=np.zeros((5,5,5)).astype(int)+1cube=np.ones((5,5,5)).astype(np.float16)arr=np.zeros(2,dtype=int)arr=np.zeros(2,dtype=np.float32)(4)reshape()arr1d=np.arange(1000)arr3d=arr1d.reshape((10,10,10))arr3d=np.reshape(arr1s,(10,10,10))(5)revel()作用与reshape相反(6)shape显示数据对象的形状arr1d.shape注意:对数据形状结构的改变只是改变了数据的显示形式,即只是改变了数据的引用,对一个数据的改变另一个也会被改变。3.记录数组(1)创建记录数组并赋值recarr=np.zeros((2,),dtype=('i4,f4,a10'))#创建大小为2的记录数组,类型为4字节整数、4字节浮点数和10字节字符recarr[:]=[(1,2.,'Hello'),(2,3.,World)](2)使用zip()recarr=np.zeros((2,),dtype=('i4,f4,a10'))col1=np.arange(2)+1col2=np.arange(2,dtype=np.float32)col3=['Hello','World']recarr[:]=zip(col1,col2,col3)(3)为每列数据命名recarr.dtype.names=('Integers','Floats','Strings')(4)使用列名访问数据recarr('Integers')4.索引和切片(1)numpy提供了类似于matlab的索引和切片alist=[[1,2],[3,4]]alist[0][1]#python方式arr=np.array(alist)arr[0,1]#单个元素arr[:,1]#第1列arr[1,:]#第1行(2)np.where()根据条件获取索引号index=np.where(arr2)new_arr=arr[index]new_arr=np.delete(arr,index)也可以这样操作:index=arr2#得到一个逻辑数组new_arr=arr[index]注意:第二种方法速度更快,而且可以用“∼index”很容易的得到与index相反的逻辑数组。5.NumPy数组的布尔操作NumPy数组元素可以通过逻辑表达式方便的操作例:#创建如PlotA所示的数组img1=np.zeros((20,20))+3img1[4:-4,4:-4]=6img1[7:-7,7:-7]=9#获取数值大于2且小于6的元素索引index1=img12index2=img16compound_index=index1&index2#上式与下式结果相同compound_index=(img13)&(img17)img2=np.copy(img1)img2[compound_index]=0#得到PlotB.#更复杂的数组逻辑操作index3=img1==9index4=(index1&index2)|index3img3=np.copy(img1)img3[index4]=0#得到PlotC.例:importnumpy.randomasranda=rand.randn(100)index=a0.2b=a[index]b=b**2–2a[index]=b6.读写操作(1)Python读写文本文件f=open('somefile.txt','r')#以只读方式打开文件,'r'表示读alist=f.readlines()#将文件内容读入列表,每一行为一个列表元素filef.close()#关闭文件f=open('newtextfile.txt','w')#以可写方式打开文件,'w'表示写f.writelines(newdata)#写入数据f.close()#关闭文件注意:读写完毕之后要将文件关闭(2)Numpy文件文件读写Python读写文件文件虽然方便且效率很好,但是不太适合处理极大的文件。当文件内容有结构,且为数字时用NumPy处理,存numpy.ndarray会更合适。例:importnumpyasnparr=np.loadtxt('somefile.txt')np.savetxt('somenewfile.txt')如果文件各列数据类型不一样,则需要指明数据类型,NumPy用来保存数据的类型为recarray,可以用处理ndarray同样的方法来对元素进行操作。recarray数据类型不能直接保存为文本文件,如果需要的话可以使用matplotlib.mlab实现。例:文件example.txt内容如下XR2132.7891XR2233.0912读入数据table=np.loadtxt('example.txt',dtype='names':('ID','Result','Type'),'formats':('S4','f4','i2'))提示:如果文本数据为ASCII格式的,使用Asciitable包读写会更加高效。(3)二进制文件文本文件处理简单方便,但是读写速度和文件大小都不能和二进制文件相比,因此大数据处理适合使用二进制文件。例:importnumpyasnpdata=np.empty((1000,1000))#创建一个较大的数组np.save('test.npy',data)#保存数据np.savez('test.npz',data)#压缩保存数据newdata=np.load('test.npy')#读入数据注意:NumPy使用numpy.save和numpy.load来读写二进制文件,但这种二进制文件只能在NumPy下读写,scipy.io可以处理更通用的二进制文件7.数学运算(1)线性代数NumPy数组间的运算只是相对应元素间的远算,不能用运算符进行矩阵运算,可以使用numpy.dot和numpy.transpose分别来进行矩阵乘法运算和矩阵转置。其优点在于常规操作时避免了对数据遍历。NumPy的matrix类型则可以直接用运算符号进行运算。例:使用matrix解方程组importnumpyasnpA=np.matrix([[3,6,-5],[1,-3,2],[5,-1,4]])#定义矩阵B=np.matrix([[12],[-2],[10]])X=A**(-1)*B#求方程组print(X)例:使用数组解方程组importnumpyasnpa=np.array([[3,6,-5],[1,-3,2],[5,-1,4]])b=np.array([12,-2,10])x=np.linalg.inv(a).dot(b)print(x)注意:数组的运算速度更快,而且为了在使用中保持数据类型一致,建议使用数组。三、SciPy1.最优化(1)数据建模和拟合SciPy函数curve_fit使用基于卡方的方法进行线性回归分析。下面,首先使用f(x)=ax+b生成带有噪声的数据,然后使用用curv_fit来拟合。例:线性回归importnumpyasnpfromscipy.optimizeimportcurve_fit#创建函数f(x)=ax+bdeffunc(x,a,b):returna*x+b#创建干静数据x=np.linspace(0,10,100)y=func(x,1,2)#添加噪声yn=y+0.9*np.random.normal(size=len(x))#拟合噪声数据popt,pcov=curve_fit(func,x,yn)#输出最优参数print(popt)例:高斯分布拟合#创建函数deffunc(x,a,b,c):returna*np.exp(-(x-b)**2/(2*c**2))#生成干静数据x=np.linspace(0,10,100)y=func(x,1,5,2)#添加噪声yn=y+0.2*np.random.normal(size=len(x))#拟合popt,pcov=curve_fit(func,x,yn)(2)函数求解SciPy的optimize模块中有大量的函数求解工具,fsolve是其中最常用的。例

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功