Numpy

1.ndarray对象

一、创建数组

1.shape():获得数组的形状,它是一个描述数组各个轴长度的元组(tuple)。

2.reshape():可以创建指定形状的新数组,而原数组的形状保持不变。两个数组其实共享数据存储空间,因此修改其中任意一个数组的元素都会同时修改另一个数组的内容。

3.数组的元素类型可以通过dtype属性获得。如:c.dtype,也可以通过dtype参数在创建数组时指定元素类型。如:np.array([1,2,3,4],dtype=np.float。

np支持的数据类型:int8, int16, int32, int64, unit8(无符号的整数,unit8是0~255), unit16~64, float32, 64, complex64, 128, boolean。字母表示数字类型(dtype),后面的数字表示位数,即数值在内存中所占的bit的数目。还有int, float和complex,其位数取决于平台类型,即16或者32位,complex也是,不过因为是两个float表示的,所以位数是64或者128。还有更高级的类型。

转换数据类型:y=np.int_([1,2,3]),返回一个np的array。

4.np.arange(开始值,终值,步长)

5.linspace()通过指定开始值,终值和元素个数创建便是等差数列的以为数组,可以通过endpoint参数指定是否包含终值,默认是true。

logspace()创建的数组时等比数列。

6.zeros()、ones()、empty()可以创建指定形状和类型的数组。其中:empty()仅仅分配数组所使用的内存,不对数组元素进行初始化操作,因此它的运行速度是最快的。zeros()将数组初始化为0,ones()将数组初始化为1。

如:array=np.zerzos((n,m)),创建了n行m列的零矩阵。

array=np.empty((n,m),np.int)

7.frombuffer()、fromstring()、fromfile()等函数可以从字节序列或文件创建数组。如:s=”abcdefgh”

np.fromstring(s,dtype=np.int8)

8.fromfunction()通过函数创建数组,它的第一个参数为计算每个数组元素的函数,第二个参数指定数组的形状。

9. arange,类似range,参数可以是小数或者负数。

10.矩阵的转置:numpy.transpose()

11.数组的tolist()方法,将其转换为python的标准浮点数列表。x.tolist()


二、存取元素

1.切片:a[n:m],通过切片获取的新数组是原始数组的一个视图。

2.整数列表对数组元素进行存取,使用列表中的每个元素作为下标,使用列表作为下标得到的数组不和原始数组共享数据。如:x=[1,2,3,4,5,6,7,8,9];b=x[[3,3,-3,8]]

3.使用整数数组作为数组下标。如:x=np.arange(10,1,-1);x[np.array([3,3,1,8])]。当下标是多维数组时,则得到的也是多维数组。

4.使用布尔数组作为下标存取数组,将手机数组中所谓数组中对应下标为true的元素。(注意:这种方式只对应于布尔数组,不能使用布尔列表)如:x=np.arange(5,0,-1);x[np.array([True,False,True,Fslse,False])]#布尔数组。X[[True,False,True,Fslse,False]]#布尔列表,True代表1,False代表0


三、多维数组(存取元素去一维相同)

1.slice对象,s_对象


四、结构数组

1.和C语言一样,在Numpy中有也很容易对这样的结构数组进行操作。只要Numpy中的结构定义和C语言中的结构定义相同,就可以很方便的读取C语言的结构数组的二进制数据,将其转换为Numply的结构数组。

如:

import numpy as np

persontype=np.dtype({

                     'names':['name','age','weight'],

                     'formats':['S32','i','f']},align=True)

a=np.array([("zhang",32,75.5),("wang",24,65.2)],dtype=persontype)

2.ufunc运算

一、四则运算

y=x1+x2:np.add(x1,x2[,y])

y=x1-x2:np.subtract(x1,x2[,y])

y=x1*x2:np.multiple(x1,x2[,y])

y=x1/x2:np.divide(x1,x2[,y])#如果两个数组的元素为整数,那么用整数除法。

np.true_divide(x1,x2[,y])#总是返回精确的商

np.floor_divide(x1,x2[,y])#总是对返回值取整


二、比较和布尔运算

1.y=x1==x2:equal(x1,x2[,y])

y=x1!=x2:not_equal(x1,x2[,y])

y=x1<x2:less(x1,x2[,y])

y=x1<=x2:less_equal(x1,x2[,y])

y=x1>x2:great(x1,x2[,y])

y=x1>=x2:great_equal(x1,x2[,y])

(由于Python中的布尔运算使用and,or和not等关键字,它们无法被重载,因此数组的布尔运算只能通过相应的ufunc函数进行。这些函数都以“logical_”开头,在IPython中使用自动补全功能可以很容易找到它们。)不太懂

2.all(),any()方法

以“bitwise_”开头的函数式比特运算函数,也可以使用“&”,“~”,“|”和“^”。位运算符的优先级比比较运算符高。


三、自定义的ufunc函数

1.通过fromyfunc()可以将计算单个值的函数转换为一个能对数组中每个数组中每个元素进行计算的ufunc函数,调用格式:fromyfunc(func,nin,nout),其中func是计算单个元素的函数,nin是func输入参数的个数,nout是func返回值的个数。

2.vectorize()


四、广播

1.广播处理:(1)让所有输入数组都向其中为数最多的数组看齐,shape属性中不足的部分都通过在前面加1补齐;(2)输出数组的shape属性石输入数组的shape属性在各个轴上的最大值;(3)如果输入数组的某个轴长度为1或与输出数组对应轴的长度相同,这个数组就能够用来计算,否则出错;(4)当输入数组的某个轴长度为1时,沿着此轴运算时都用此轴上的第一组值。

2.ogrid对象,x,y=np.ogrid[:5,:5] x=array([[0],[1],[2],[3],[4]])y=array([[0,1,2,3,4]])

3.mgrid对象,返回的是x,y进行广播处理后的数组。


五、ufunc函数的方法

1.reduce()方法是沿着axis参数指定的轴对数组进行操作,相当于将<op>运算符插入到沿axis轴的所有元素之间。<op>.reduce(array,axis=0,dtype=none)

如:np.add.reduce([1,2,3])=6

2.accumulate()和reduce()相似,只是它返回的数组和输入数组的形状相同,保存所有的中间计算结果。

3.reduceat()

4.outer()


3.庞大的数据库

一、求和、平均值、方差

1.np.sum(a,axis),sum()计算数组元素之和,也可以对列表、元组等和数组类似的序列进行求和,当数组是多维时,它计算数组中所有元素的和。如果指定参数axis,求和运算将沿着指定的轴进行。

2.mean()用于求数组的平均值。np.mean(a,axis,dtype,out)。对于整数数组,它使用双精度浮点数进行计算,而对于其他类型的数组则使用和数组类型相同的累加变量进行计算。average()也可以求平均值,它没有out和dtype参数,但有一个指定每个元素权值的weights参数。

3.std()和var()分别计算数组的标准差和方差,有axis、out及dtype等参数。


二、最值和排序

min(a,out,axis):求最小值

max(a,out,axis):求最大值

ptp(a,out,axis):计算最大值和最小值之间的差

argmax()和argmin()可以求最大值和最小值的下标

sort(a,axis)用于数组排序,axis默认值为-1

argsort()返回数组的排序下标,axis参数的默认值为-1

median()可以获得数组的中值


三、多项式函数

1.poly1d()将悉数转换为poly1d(一元多项式)对象。例如f(x)=X^3-2*x+1,所以系数a=np.array([1.0,0,-2,1])

2.对象式对象的deriv()和integ()方法分别计算多项式函数的微分和积分。

3.多项式函数的根可以使用roots()函数计算。

4.poly()函数可以将根转换回多项式的系数。

5.polyfit()函数可以对一组数据使用多项式函数进行拟合,找到和这组数据最接近的多项式系数。


四、分段函数

1.x=where(condition,y,z),其中condition,y,z都是数组,它的返回值是一个形状与condition相同的数组,当condition中的某个元素为True时,数组x中对应下标的值从数组y中获取,否则从数组z获取。如果y和z是单个的数值或者它们的形状与condition的不同,将先通过广播运算使其形状一致。

2.随着分段的增多,需要嵌套更多的层的where(),但不易于阅读,可以用select()解决。

select(condlist,choicelist,default=0),其中,condist是一个长度为N的布尔数组列表,choicelist是一个长度为N的储存候选值得数组列表,所有数组的长度都为M。(不太明白)


五、统计函数

1.unique()返回其参数数组中所有不同的值,并且按照从小到大的顺寻排列,它有两个参数:return_index:True表示同时返回原始数组的下标,return_inverse:True表示返回重建原始数组用的下标数组。如:a=[1,1,9,5,2,6,7,6,2,9];x,idx=np.unique(a,return_index=True),x=[1,2,5,6,7,9],idx=[0,4,3,5,6,2]

x,ridx=np.unique(a,return_inverse=True),ridx=[0,0,5,2,1,3,4,3,1,5]

2.bincount()对整数数组中各个元素出现的次数进行统计,它要求数组中所有元素都是非负的,其返回数组中第i个元素的值表示整数i在参数数组中出现的次数。

np.bincount(a)=[0,2,2,0,0,1,2,1,0,2]

bincount(x,weights),weights参数可以指定每个数对应的权值,返回数组x中每个整数对应的w中的权值之和。

3.histogram(a,bins=10,range=None,norms=False,weights=None)对以为数组进行直方图统计。a是保存待统计数据数组,bins指定统计的区间个数,range是一个长度为2的元组,表示统计范围的最小值和最大值,默认值为None,当normed参数为False时,函数返回数组a中的数据在每个区间的个数,否则对个数进行正规化处理,使它等于每个区间的概率密度。weights参数和bincount()类似。histogram()返回两个一维数组——hist和bin_edges,第一个是每个区间的统计结果,第二个上是分割的区间范围。

 

4.线性代数

一、各种乘积运算

1.dot():对于两个一维数组,计算的是这两个数组对应下标元素的乘积和。对于二维数组,计算的是两个数组的矩阵乘积;对于多维数组,他的通用计算公式如下:dot(a,b)[I,j,k,m]=sum(a[I,j,:]*b[k,:,m])

2.inner:和dot乘积一样,对于两个一维数组,计算的是这两个数组对应下标元素的乘积之和。对于多维数组,它计算的结果数组中的每个元素都是:数组a和b最后一维的内积,因此数组a和b最后一维的长度必须相同。inner(a,b)[I,j,k,m]=sum(a[I,j,:]*b[k,m,:])

3.outer:只按照一维数组进行计算,如果传入参数是多维数组,先将此数组展平为一维数组,然后再进行运算。


二、解线性方程组

inv()计算逆矩阵,solve(0求解多元一次方程组。

 

5.文件存取

1.tofile():可以方便地将数据以二进制格式写进文件。它输出的数据不保存数组形状和元素类型等信息,因此用fromfile()函数读回数据时需要用户指定元素内型,并对数组的形状进行适当的修改。a=np.arange(0,12);a.shape=3,4;a.tofile(“a.bin”);b=np.fromfile(“a.bin”,dtype=np.int32);b.shape=3,4,这是a和b相等了

2.load()和save()用Numpy专用的二进制格式保存数据,它们会自动处理元素类型和形状。

3.savez():将多个数组保存到一个文件中,第一个参数是文件名,其后的参数都是需要保存的数组,输出的是一个扩展名为npz的压缩文件。

4.savatxt()和loadtxt()可以读写保存一维和二维数组的文本文件。

 

6.内存映射数组

内存映射数组使用memmap()创建,它的调用参数如下:

memmap(filename,dtype=uint8,mode=“r+”,offset=0,shape=None,order=“C”)

filename:存储数组的文件名,除了“w+”模式之间,文件必须存在,并且已经储存有数据。

dtype:Numpy的数据类型,可以是内置的数据类型,也可以是用户自己定义的结构类型。

offset:文件中存储数据的起始位置,以字节为单位。

mode:文件操作模式,“r”表示只读,“c”表示可以修改数组但不写入文件,“r+”表示可以对数组进行读写,并自动将结果保存回文件,“w+”表示创建文件或覆盖已有的文件。

order:元素排列格式,“C”表示C语言格式,“F”表示Fortran语言格式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章