以前总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大。堪比Matlab啊。果然是人生苦短,我用Python。(文末给大家准备了最全的python教程)希望可以帮助大家快速入门Numpy。如果你有Matlab基础,那么你能很快看懂本文!!!
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nestedliststructure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。
一个栗子
创建矩阵
对于Python中的numpy模块,一般用其提供的ndarray对象。创建一个ndarray对象很简单,只要将一个list作为参数即可。例如:
矩阵行数列数
矩阵按行列选取
矩阵的截取和list相同,可以通过[](方括号)来截取
矩阵按条件截取
按条件截取应用较多的是对矩阵中满足一定条件的元素变成特定的值。例如将矩阵中大于6的元素变成0
Stackingtogetherdifferentarrays
矩阵的合并可以通过numpy中的hstack方法和vstack方法实现:
- 矩阵的合并也可以通过concatenatef方法。
- np.concatenate((a1,a2),axis=0)等价于np.vstack((a1,a2))
- np.concatenate((a1,a2),axis=1)等价于np.hstack((a1,a2))
通过函数创建矩阵
arange
linspace/logspace
ones、zeros、eye、empty
ones创建全1矩阵,zeros创建全0矩阵,eye创建单位矩阵,empty创建空矩阵(实际有值)
fromstring
fromstring()方法可以将字符串转化成ndarray对象,需要将字符串数字化时这个方法比较有用,可以获得字符串的ascii码序列。
random
fromfunction
fromfunction()方法可以根据矩阵的行号列号生成矩阵的元素。例如创建一个矩阵,矩阵中的每个元素都为行号和列号的和。
矩阵的运算
常用矩阵运算符
Numpy中的ndarray对象重载了许多运算符,使用这些运算符可以完成矩阵间对应元素的运算。
运算符说明+矩阵对应元素相加-矩阵对应元素相减矩阵对应元素相乘/矩阵对应元素相除,如果都是整数则取商%矩阵对应元素相除后取余数矩阵每个元素都取n次方,如*2:每个元素都取平方
常用矩阵函数
同样地,numpy中也定义了许多函数,使用这些函数可以将函数作用于矩阵中的每个元素。表格中默认导入了numpy模块,即importnumpyasnp。a为ndarray对象。
常用矩阵函数说明np.sin(a)对矩阵a中每个元素取正弦,sin(x)np.cos(a)对矩阵a中每个元素取余弦,cos(x)np.tan(a)对矩阵a中每个元素取正切,tan(x)np.arcsin(a)对矩阵a中每个元素取反正弦,arcsin(x)np.arccos(a)对矩阵a中每个元素取反余弦,arccos(x)np.arctan(a)对矩阵a中每个元素取反正切,arctan(x)np.exp(a)对矩阵a中每个元素取指数函数,exnp.sqrt(a)对矩阵a中每个元素开根号
- 当矩阵中的元素不在函数定义域范围内,会产生RuntimeWarning,结果为nan(notanumber)
矩阵乘法(点乘)
矩阵乘法必须满足矩阵乘法的条件,即第一个矩阵的列数等于第二个矩阵的行数。矩阵乘法的函数为dot。
矩阵的转置a.T
矩阵的转置还有更简单的方法,就是a.T。
矩阵的逆
设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得:AB=BA=E。则我们称B是A的逆矩阵,而A则被称为可逆矩阵。
求矩阵的逆需要先导入numpy.linalg,用linalg的inv函数来求逆。矩阵求逆的条件是矩阵应该是方阵。
矩阵信息获取(如均值等)
最值
获得矩阵中元素最大最小值的函数分别是max和min,可以获得整个矩阵、行或列的最大最小值。
平均值
获得矩阵中元素的平均值可以通过函数mean()。同样地,可以获得整个矩阵、行或列的平均值。
方差
方差的函数为var(),方差函数var()相当于函数mean(abs(x-x.mean())**2),其中x为矩阵。
标准差
标准差的函数为std()。std()相当于sqrt(mean(abs(x-x.mean())**2)),或相当于sqrt(x.var())。
中值
中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值。中值的函数是median(),调用方法为numpy.median(x,[axis]),axis可指定轴方向,默认axis=None,对所有数取中值。
求和
矩阵求和的函数是sum(),可以对行,列,或整个矩阵求和
累积和
某位置累积和指的是该位置之前(包括该位置)所有元素的和。例如序列[1,2,3,4,5],其累计和为[1,3,6,10,15],即第一个元素为1,第二个元素为1+2=3,……,第五个元素为1+2+3+4+5=15。矩阵求累积和的函数是cumsum(),可以对行,列,或整个矩阵求累积和。
极差
百分位数
序号参数及描述1.a输入数组2.q要计算的百分位数,在0~100之间3.axis沿着它计算百分位数的轴
加权平均值
ShapeManipulation
Changingtheshapeofanarray
数组的形状可以用以下方式改变。Notethatthefollowingthreecommandsallreturnamodifiedarray,butdonotchangetheoriginalarray:
Thereshapefunctionreturnsitsargumentwithamodifiedshape,whereasthendarray.resizemethodmodifiesthearrayitself:
Ifadimensionisgivenas-1inareshapingoperation,theotherdimensionsareautomaticallycalculated:
Splittingonearrayintoseveralsmallerones
Usinghsplit,youcansplitanarrayalongitshorizontalaxis,eitherbyspecifyingthenumberofequallyshapedarraystoreturn,orbyspecifyingthecolumnsafterwhichthedivisionshouldoccur:
CopiesandViews
Whenoperatingandmanipulatingarrays,theirdataissometimescopiedintoanewarrayandsometimesnot.Thisisoftenasourceofconfusionforbeginners.Therearethreecases:
NoCopyAtAll
a=b,改变b就相当于改变a,或者相反。
VieworShallowCopy
Differentarrayobjectscansharethesamedata.Theviewmethodcreatesanewarrayobjectthatlooksatthesamedata.
Slicinganarrayreturnsaviewofit:
Python精讲Numpy基础,大牛笔记详细解释
DeepCopy
Thecopymethodmakesacompletecopyofthearrayanditsdata.
曼德勃罗