NumPy快速入门

作者: mrlevo520 | 来源:发表于2016-09-03 17:20 被阅读3396次

    Python 2.7
    IPython 4.1.2


    关于Numpy

    • Numpy是Python的一个矩阵类型,提供大量矩阵处理函数,内部通过C实现。
    • 包含两种数据结构,数组array和矩阵matrix,其实就是array而已

    构建数组array

    • 通过tuple构建array
    In[1]: from numpy import *
    
    In[2]: yuanzu = (4,5,6)
    In[3]: ll = array(yuanzu)
    In[4]: ll
    
    Out[4]: array([4, 5, 6])
    
    • 通过list构建array
    In[5]: pylist = [0,1,2]
    In[6]: jj = array(pylist)
    In[7]: jj
    
    Out[7]: array([0, 1, 2])
    
    
    • 构建多维array
    In[95]: pylist1 = [1,2,3]
    In[96]: pylist2 = [4,5,6]
    In[100]: marray = array([pylist1,pylist2])
    In[102]: marray
    
    Out[102]: 
    array([[1, 2, 3],
           [4, 5, 6]])
    

    array基本操作

    以marray的array来说

    In[102]: marray
    
    Out[102]: 
    array([[1, 2, 3],
           [4, 5, 6]])
    
    • array索引
    In[104]: marray[0][2]
    Out[104]: 3
    
    • array的对应相乘
    In[105]: marray*2
    
    Out[105]: 
    array([[ 2,  4,  6],
           [ 8, 10, 12]])
    
    In[106]: marray*marray
    
    Out[106]: 
    array([[ 1,  4,  9],
           [16, 25, 36]])
    


    构建矩阵matrix

    • 同样可由tuple和list构建matrix
    #由list构建
    In[84]: mm = mat(pylist)
    In[85]: mm
    
    Out[85]: matrix([[0, 1, 2]])
    
    #由tuple构建
    In[107]: oo = mat(yuanzu)
    In[108]: oo
    
    Out[108]: matrix([[4, 5, 6]])
    
    
    • 由array构建matrix
    In[109]: pp = mat(marray)
    In[110]: pp
    Out[110]: 
    matrix([[1, 2, 3],
            [4, 5, 6]])
    

    matrix基本操作

    对下面的pp矩阵来操作

    In[110]: pp
    Out[110]: 
    matrix([[1, 2, 3],
            [4, 5, 6]])
    
    • 查看维数.shape
    In[111]: pp.shape
    Out[111]: (2L, 3L) #两行三列的矩阵
    
    • 取值,可以使用分片方法
    In[116]: pp[1,2] #取第二行第三列元素
    Out[116]: 6
    
    In[115]: pp[1,:] #取第二行,所有列
    Out[115]: matrix([[4, 5, 6]])
    
    
    • 转置.T
    In[112]: pp.T
    Out[112]: 
    matrix([[1, 4],
            [2, 5],
            [3, 6]])
    
    • 矩阵乘法,注意矩阵乘法的规则,(m,n)*(n,p),对应维数。
    In[113]: pp*(pp.T)
    
    Out[113]: 
    matrix([[14, 32],
            [32, 77]])
    
    • 对应元素相乘 multiply(a,b)
    In[114]: multiply(pp,pp)
    
    Out[114]: 
    matrix([[ 1,  4,  9],
            [16, 25, 36]])
    
    • 排序sort,注意是原地排序,会改变原始数据,这个和pandas中的index操作不一样
    In[119]: qq = mat([2,1,3]) #构建一个新的matrix
    In[120]: qq
    
    Out[120]: matrix([[2, 1, 3]])
    
    
    In[121]: qq.sort() #进行递增排序,改变原来数据
    In[122]: qq
    
    Out[122]: matrix([[1, 2, 3]])
    
    • 获得矩阵中每个元素的排序序号
    In[126]: cc = mat([[3,1,4],[2,3,4]]) #重新构建一个矩阵
    In[127]: cc
    
    Out[127]: 
    matrix([[3, 1, 4],
            [2, 3, 4]])
    
    
    In[128]: cc.argsort()
    
    Out[128]: 
    matrix([[1, 0, 2],
            [0, 1, 2]], dtype=int64)
    #比如说[3,1,4]这一行,元素先从小到大排序为[1,3,4],对应1的元素在原本的矩阵中索引应该是1,对应3的索引是0,4的索引是2,所以得出[1,0,2]
    

    array VS matrix

    官方建议多使用array

    The main advantage of numpy arrays is that they are more general than 2-dimensional matrices. What happens when you want a 3-dimensional array? Then you have to use an ndarray, not a matrix object. Thus, learning to use matrix objects is more work -- you have to learn matrix object operations, and ndarray operations.

    一句话,matrix应该算是array的一个分支,只是array的二维表示而已,matrix的操作,array都可以完成,值得注意的是,想要完成矩阵相乘,而不是对应相乘,array需要采用dot方法,举个例子

    #对应相乘
    In[129]: marray*marray
    
    Out[129]: 
    array([[ 1,  4,  9],
           [16, 25, 36]])
    
    #矩阵相乘
    In[130]: marray.dot(marray.T)
    Out[130]: 
    array([[14, 32],
           [32, 77]])
    

    总结

    If you are willing to give up the visual appeal of numpy matrix product notation, then I think numpy arrays are definitely the way to go.

    --也就是,没事多用用array


    致谢

    利用python进行数据分析.Wes McKinney
    机器学习实战.Peter Harrington

    相关文章

      网友评论

      • Li_Michael:你好,非常感谢分享,请问notebook的in/out格式怎么保留的,还是后面又调整的?我复制后也有这个,就是没有在同一行,输出markdown后没有这两个标签了。:sweat:
        mrlevo520:@Li_Michael 直接复制粘贴,放在代码的框里
        Li_Michael:@mrlevo520 文本部分也是在ipython中写的吗?我用的notebook转为markdown后就没有in/out了
        mrlevo520:直接在命令框输入ipython即可

      本文标题:NumPy快速入门

      本文链接:https://www.haomeiwen.com/subject/glakettx.html