机器学习和数据挖掘4——NumPy快速入门

来源:互联网 发布:欧姆龙传感器淘宝 编辑:程序博客网 时间:2024/06/16 14:38

机器学习和数据挖掘4——NumPy快速入门

NumPy快速入门




一、关于Numpy


Numpy是Python第一个矩阵类型,提供了大量矩阵处理的函数。非正式地来说,它是一个使运算更easy,执行速度更快的库,因为它的内部运算是通过C语言实现的。

numpy包含了两种基本的数据类型:矩阵和数组。二者在处理上稍有不同,如果你熟悉MATLAB的话,矩阵的处理不是难事。在使用标准的Python时,处理这两种数据类型都需要循环,而在numpy中则可以省略这些语句。


二、简单使用数组Array

处理数组的一些例子:

 >>> from numpy import array 

>>> mm = array((1,1,1)) 

>>> nn = array((1,2,3)) 

>>> mm + nn array([2, 3, 4])


而如果只用Python常规处理的话,上述过程则必须使用for循环。

对每个元素乘以2:

>>> mm * 2 

array([2, 2, 2])

对每个元素平方:

 >>> nn ** 2 

array([1, 4, 9])


可以像访问列表易于访问数组里的元素: 

 >>> nn[1] 

2


Numpy也支持多维数组: 

 >>> jj = array([[1,2,3],[1,1,1]]) 

>>> jj 

array([[1, 2, 3], 

 [1, 1, 1]])


多维数组中的元素也可以像列表一样访问: 

 >>> jj[0] 

array([1, 2, 3]) 

 >>> jj[0][1] 


也可以用矩阵方式访问:

 >>> jj[0,1] 

2


当把两个数组乘起来的时候,两个数组的元素将对应相乘: 

 >>> a1 = array([1,2,3]) 

>>> a2 = array([3,4,5]) 

>>> a1 * a2 

array([ 3, 8, 15])



三、简单使用矩阵matrix


导入: 

 >>> from numpy import mat ,matrix


关键字mat是matrix的缩写。

 >>> ss = mat([1,2,3])

 >>> ss 

matrix([[1, 2, 3]]) 

>>> mm = matrix([1,2,3]) 

>>> mm 

matrix([[1, 2, 3]])


可以访问矩阵中的单个元素: 

>>> mm[0,1] # 0代表第0行 

2


可以把Python列表转成Numpy矩阵: 

 >>> pyList = [5,11,13] 

>>> mat(pyList) 

matrix([[ 5, 11, 13]]) 


试试上面两个矩阵相乘: 

 Traceback (most recent call last): 

File "", line 1, in

 File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 343, in __mul__ 

 return N.dot(self, asmatrix(other)) 

ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)


可以看到,矩阵数据类型的运算会强制执行数学中的矩阵运算。矩阵相乘的必要条件是左边矩阵的列数和右边矩阵的行数必须相等。这时候需要将其中的一个矩阵转置,numpy数据类型中有一个转置的方法: 

 >>> mm * ss.T 

matrix([[14]])


这样就调用了.T完成了对ss的转置。 

知道矩阵的大小有助于上述错误的调试,可以通过numpy中的shape方法来查看矩阵或者数组的维数:  

>>> from numpy import shape

 >>> shape(mm) 

(1, 3)


如果需要把矩阵mm的每个元素和矩阵ss的每个元素对应相乘应该怎么办呢?这就是所谓的元素相乘法,可以使用Numpy的multiply方法:

 >>> from numpy import multiply 

>>> multiply(mm,ss) 

matrix([[1, 4, 9]])


此外,矩阵和数组还有很多有用的方法,如排序:

 >>> mm.sort()

 >>> mm 

matrix([[1, 2, 3]])


这种排序方法是原地排序(即排序后的结果占用原始的数据空间),所以如果希望保留数据的原序,则必须事先做一份拷贝。也可以用argsort()方法得到矩阵中每个元素的排序序号:

 >>> dd = mat([4,5,1]) 

>>> dd.argsort() 

matrix([[2, 0, 1]])


可以计算矩阵的均值: 

 >>> dd.mean() 

3.3333333333333335


再回顾下多维数组: 

 >>> jj = mat([[1,2,3],[8,8,8]]) 

>>> jj 

matrix([[1, 2, 3], 

 [8, 8, 8]]) 

>>> shape(jj) 

(2, 3)


这是一个2行3列的数组,如果想取出其中一行的元素,可以使用冒号(:)操作符和行号来完成。 例如,要取出第一行元素,应该输入: 

 >>> jj[1:] 

matrix([[8, 8, 8]]) 

>>> jj[1,0:3] 

matrix([[8, 8, 8]]) 


还可以指定要取出元素的范围。如果想要取出第一行第0列和第1列的元素,可以使用下面的语句: >>> jj[1,0:2] 

matrix([[8, 8]]) 



这种索引方式能够简化numpy的编程。在数组和矩阵数据类型之外,Numpy还提供了其他有用的方法。


上述每个矩阵变换,都输出一遍,来看看矩阵变换特性


建议浏览完整的官方文档 : http://docs.scipy.org/doc/ 




一、关于Numpy


Numpy是Python第一个矩阵类型,提供了大量矩阵处理的函数。非正式地来说,它是一个使运算更easy,执行速度更快的库,因为它的内部运算是通过C语言实现的。

numpy包含了两种基本的数据类型:矩阵和数组。二者在处理上稍有不同,如果你熟悉MATLAB的话,矩阵的处理不是难事。在使用标准的Python时,处理这两种数据类型都需要循环,而在numpy中则可以省略这些语句。


二、简单使用数组Array

处理数组的一些例子:

 >>> from numpy import array 

>>> mm = array((1,1,1)) 

>>> nn = array((1,2,3)) 

>>> mm + nn array([2, 3, 4])


而如果只用Python常规处理的话,上述过程则必须使用for循环。

对每个元素乘以2:

>>> mm * 2 

array([2, 2, 2])

对每个元素平方:

 >>> nn ** 2 

array([1, 4, 9])


可以像访问列表易于访问数组里的元素: 

 >>> nn[1] 

2


Numpy也支持多维数组: 

 >>> jj = array([[1,2,3],[1,1,1]]) 

>>> jj 

array([[1, 2, 3], 

 [1, 1, 1]])


多维数组中的元素也可以像列表一样访问: 

 >>> jj[0] 

array([1, 2, 3]) 

 >>> jj[0][1] 


也可以用矩阵方式访问:

 >>> jj[0,1] 

2


当把两个数组乘起来的时候,两个数组的元素将对应相乘: 

 >>> a1 = array([1,2,3]) 

>>> a2 = array([3,4,5]) 

>>> a1 * a2 

array([ 3, 8, 15])



三、简单使用矩阵matrix


导入: 

 >>> from numpy import mat ,matrix


关键字mat是matrix的缩写。

 >>> ss = mat([1,2,3])

 >>> ss 

matrix([[1, 2, 3]]) 

>>> mm = matrix([1,2,3]) 

>>> mm 

matrix([[1, 2, 3]])


可以访问矩阵中的单个元素: 

>>> mm[0,1] # 0代表第0行 

2


可以把Python列表转成Numpy矩阵: 

 >>> pyList = [5,11,13] 

>>> mat(pyList) 

matrix([[ 5, 11, 13]]) 


试试上面两个矩阵相乘: 

 Traceback (most recent call last): 

File "", line 1, in

 File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 343, in __mul__ 

 return N.dot(self, asmatrix(other)) 

ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)


可以看到,矩阵数据类型的运算会强制执行数学中的矩阵运算。矩阵相乘的必要条件是左边矩阵的列数和右边矩阵的行数必须相等。这时候需要将其中的一个矩阵转置,numpy数据类型中有一个转置的方法: 

 >>> mm * ss.T 

matrix([[14]])


这样就调用了.T完成了对ss的转置。 

知道矩阵的大小有助于上述错误的调试,可以通过numpy中的shape方法来查看矩阵或者数组的维数:  

>>> from numpy import shape

 >>> shape(mm) 

(1, 3)


如果需要把矩阵mm的每个元素和矩阵ss的每个元素对应相乘应该怎么办呢?这就是所谓的元素相乘法,可以使用Numpy的multiply方法:

 >>> from numpy import multiply 

>>> multiply(mm,ss) 

matrix([[1, 4, 9]])


此外,矩阵和数组还有很多有用的方法,如排序:

 >>> mm.sort()

 >>> mm 

matrix([[1, 2, 3]])


这种排序方法是原地排序(即排序后的结果占用原始的数据空间),所以如果希望保留数据的原序,则必须事先做一份拷贝。也可以用argsort()方法得到矩阵中每个元素的排序序号:

 >>> dd = mat([4,5,1]) 

>>> dd.argsort() 

matrix([[2, 0, 1]])


可以计算矩阵的均值: 

 >>> dd.mean() 

3.3333333333333335


再回顾下多维数组: 

 >>> jj = mat([[1,2,3],[8,8,8]]) 

>>> jj 

matrix([[1, 2, 3], 

 [8, 8, 8]]) 

>>> shape(jj) 

(2, 3)


这是一个2行3列的数组,如果想取出其中一行的元素,可以使用冒号(:)操作符和行号来完成。 例如,要取出第一行元素,应该输入: 

 >>> jj[1:] 

matrix([[8, 8, 8]]) 

>>> jj[1,0:3] 

matrix([[8, 8, 8]]) 


还可以指定要取出元素的范围。如果想要取出第一行第0列和第1列的元素,可以使用下面的语句: >>> jj[1,0:2] 

matrix([[8, 8]]) 



这种索引方式能够简化numpy的编程。在数组和矩阵数据类型之外,Numpy还提供了其他有用的方法。


上述每个矩阵变换,都输出一遍,来看看矩阵变换特性


建议浏览完整的官方文档 : http://docs.scipy.org/doc/