python_numpy基础

作者: Kedi | 来源:发表于2016-03-27 19:56 被阅读373次
    1. 矩阵的创建

    In:

    a=np.arange(1,5)
    a=np.array([1,2,3,4,5])
    print a, a.dtype, a.shape, a.size, a.ndim
    
    

    Out:

    [1 2 3 4]
    
    

    np.arange类似range函数
    np.array用来生成矩阵
    dtype是数据类型,有int64, complex, uint16等
    shape是个元组属性,表示每一维的宽度
    size是所有元素个数
    ndim是维数

    linspace创建
    In:

    # linspace返回0,1之间的5个数据
    x=np.linspace(0,1,5)
    

    Out:

    array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])
    
    2.铺平一个矩阵

    In:

    b=np.array([1,2,3],dtype='float16') # int64, complex, uint16......
    #注意[]的使用
    m=np.array([np.arange(6),np.arange(6)])
    n=np.array([[1,2,3,4],[5,6,7,8]])
    #展平一个矩阵
    x=m.ravel()#x为[0 1 2 3 4 5 0 1 2 3 4 5]
    y=n.flatten()#y为[1 2 3 4 5 6 7 8]
    

    注解:
    ravel()和flatten()看起来效果一样,都是把矩阵展平了。它们的区别在于
    ravel()返回的是原有数据的一个映射(view),没有分配新的存储,改变它的值原有数据会变
    flatten()返回的是新的数据,改变它的值原有数据不会变

    3.改变矩阵的shape/size(直接在当前数据上修改,返回空)

    In:

    #
    n=[[0 1 2 3 4 5]
     [0 1 2 3 4 5]]
    # reshape返回一个view
    x=n.reshape(3,4)
    #
    x=[[0 1 2 3]
         [4 5 0 1]
         [2 3 4 5]]
    n不变
    # resize直接在当前数据上更改,返回空
    y=n.resize(3,4)
    #y为none,
    n=[[0 1 2 3]
         [4 5 0 1]
         [2 3 4 5]]
    

    注:
    当改变一个x的值时,比如x[2]=10,n的值会随之改变。
    如果想要它不变, copy()可以强制返回一个新的数据
    x=m.reshape(3,4).copy()

    4.随机排一维

    In:

    a = np.arange(10)#a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    np.random.shuffle(a)  # 随机排第一维
    

    Out

    a=[2 3 6 7 0 4 9 5 1 8]
    

    In

    a = np.arange(9).reshape((3, 3)) 
    np.random.shuffle(a)
    

    Out

    [[6, 7, 8],
     [0, 1, 2],
     [3, 4, 5]]
    
    5.生成全1、全0、对角矩阵
    # 全0矩阵
    a=np.zeros((3,3))
    # 全1矩阵
    b=np.ones((5,4))
    # 单位矩阵
    c=np.eye(3)
    # 取对角元素
    np.diag(b)
    
    6.矩阵的加法
    a = np.arange(9).reshape((3, 3))
    
    ## 每个元素的broadcast
    print a
    print a+3
    
    ## 行broadcast
    print a+np.arange(3)
    
    ## 列broadcast
    print a+np.arange(3).reshape(3,1)
    

    注:
    nm + 11 就是将11的元素作用在nm的整个矩阵
    nm + n1 就是将n1的元素作用在nm的每一列
    nm + 1m 就是将1m的元素作用在nm的每一行
    (乘法类似)

    7.矩阵的转置
    print m.transpose()
    print m.T
    
    8.矩阵的乘法
    a = np.arange(4).reshape((2, 2))#a=[[0, 1],[2, 3]]
    b = np.linspace(1,2,2)#b=[1,2]
    
    # 两种矩阵乘法形式
    print a.dot(b)
    print np.dot(a,b)
    #输出[2,8]
    
    ## 每个元素broadcast
    print a*2
    
    # 行broadcast
    print a*[1,2]
    #a为[[0, 1],[2, 3]],输出[[0, 2], [2, 6]]
    
    # 列broadcast
     a*[[1],[2]]
    #a为[[0, 1],[2, 3]],输出[[0, 1], [4, 6]])
    
    9.矩阵的拼接

    hstack

    ##a为[[0, 1],[2, 3]],b=[[0, 2], [4, 6]]
    c=np.hstack((a,b))#horizontal
    #c=[[0, 1, 0, 2], [2, 3, 4, 6]]
    c=np.vstack((a, b))#vertical
    #c=[[0, 1], [2, 3], [0, 2], [4, 6]]
    

    concatenate

    d=np.concatenate((a, b), axis=1)
    #d=[[0, 1, 0, 2],[2, 3, 4, 6]]
    d=np.concatenate((a, b), axis=0)
    #d=[[0, 1], [2, 3], [0, 2], [4, 6]]
    
    
    #a为[[0, 1],[2, 3]]
    print np.hsplit(a, 2)#[array([[0],[2]]), array([[1], [3]])]
    print np.vsplit(a,2)#[array([[0, 1]]), array([[2, 3]])]
    
    10.矩阵的查找

    In:

    a = np.arange(12).reshape((3, 4))
    b = a%2==0#布尔类型
    c = a>4#布尔类型
    print b
    print c
    

    Out:

    a=[[ 0,  1,  2,  3],
     [ 4,  5,  6,  7],
     [ 8,  9, 10, 11]]
    b=([[ True, False,  True, False],
      [ True, False,  True, False],
      [ True, False,  True, False]], dtype=bool)
    c=([[False, False, False, False],
      [False,  True,  True,  True],
      [ True,  True,  True,  True]], dtype=bool)
    
    #a=[[ 0,  1,  2,  3],
     [ 4,  5,  6,  7],
     [ 8,  9, 10, 11]]
    
    print np.argmax(a)#11
    
    # 其实是列broadcast,返回每列最大值的index
    print np.argmax(a, axis=0)
    #array([2, 2, 2, 2]),共4列,每列第三个元素最大
    
    # 行broadcast,返回每行最大值的index
    print np.argmax(a, axis=1)
    #array([3, 3, 3]),共3行,每行第4个元素最大
    
    # np.where支持多个逻辑组合, 得到满足条件的index
    idx=np.where((a>3))
    print a[idx]
    
    idx=np.where((a>3)&(a<7))
    #idx=(array([1, 1, 1, 1, 2, 2, 2, 2]), array([0, 1, 2, 3, 0, 1, 2, 3]))
    #第一个array是行,第二个array是列
    print a[idx]
    #[ 4  5  6  7  8  9 10 11]
    idx=np.where((a>3)&(a<7))
    print a[idx]
    

    相关文章

      网友评论

        本文标题:python_numpy基础

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