numpy 学习

作者: l_b_n | 来源:发表于2017-05-09 17:18 被阅读0次

    numpy.1

    import numpy as np
    
    a = np.arange(4)
    print(a)
    #生成的是一个从0开始的4个值的数列
    #[0 1 2 3]
    
    a = np.arange(4).reshape((2,2))
    print(a)
    print(a.shape)
    #判断矩阵的样式(2, 2)代表2行2列
    #生成一个2行2列的矩阵
    #[[0 1]
    # [2 3]]
    
    a = np.arange(4).reshape((2,2))
    print(a)
    print(np.sum(a,axis = 0))#axis = 0 代表按列相加 axis=1代表按行 
    '''[[0 1]
     [2 3]]'''
    #[2 4] 返回一个array
    
    print(np.max(a))#找到其中最大的值
    print(np.min(a))#找到最小的值
    print(np.max(a,axis = 0))#按列找出每一列的最大值
    print(np.min(a,axis = 0))#同上
    
    b = np.arange(12).reshape((3,4))
    print(b)
    print(np.argmax(b,axis = 1))#[3 3 3] 按照行将每一行的最大的值的位置返回一个数列
    print(b.mean())#算出所有值的 平均值
    print(np.cumsum(b))
    #[ 0  1  3  6 10 15 21 28 36 45 55 66]
    #将每一个值递加 并返回
    '''
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    '''
    
    d = np.random.random((2,3)) * 10 - 3
    #可以看到随机生成的一个2行3列的矩阵并且对矩阵的运算是对每一个元素的计算
    print(d)
    print(d.shape)#(2, 3)
    print(np.transpose(d)#对矩阵的转置 transpose
    print(d.T)#对矩阵的转置
    '''
    [[ 3.79442884  2.65870034  2.96206461]
     [-1.91460778  1.11432605  2.06610598]]
    '''
    '''
    [[-0.27988317 -2.06762975 -1.91392339]
     [-1.44516069 -1.55149608  6.53402984]]
    (2, 3)
    [[-0.27988317 -1.44516069]
     [-2.06762975 -1.55149608]
     [-1.91392339  6.53402984]]
    '''
    
    
    d = np.arange(12).reshape((3,4))
    a = np.arange(4).reshape((4,1))
    print(d)
    print(a)
    print(d.dot(a))#矩阵的乘法d 在前
    print(np.mean(d,axis = 0))
    print(np.mean(d,axis = 1))
    #[ 4.  5.  6.  7.]按照列来求平均值返回4列的平均值
    #[ 1.5  5.5  9.5]按照行来求返回3行
    '''
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    
    [[0]
     [1]
     [2]
     [3]]
    
    [[14]
     [38]
     [62]]
    '''
    
    
    
    A = np.arange(4,14).reshape(2,5)
    print(A)
    print(A[1])#按行来取出数据
    print(A[1,1:3])#取出矩阵中的更加具体的一些值
    print(A[0:,1:3])#从矩阵中取出矩阵
    '''
    [[ 5  6]
      [10 11]]
    '''
    print(A.flatten())
    '''
    [[ 4  5  6  7  8]
       [ 9 10 11 12 13]]'''
    [ 9 10 11 12 13]
    [10 11]
    [ 4  5  6  7  8  9 10 11 12 13]
    
    

    numpy.2

    增加维度

    正常来说a如果单纯为一个list的话[ ]*3 代表‘复制’如下面的d所示
    所以利用np.array 变成数列可以进行运算
    但是还是不够,需要变成向量(矩阵)
    list => array => matrix(vector)

    a = np.array([1,1,1])
    b = a*3
    c = [1,1,1]
    d = c * 3
    print(b)#[3 3 3]
    print(d) #  [1, 1, 1, 1, 1, 1, 1, 1, 1]
    
    

    a 变成 array 之后 利用[np.newaxis,:] 变成一个一行一列的向量
    [np.newaxis,:] 表示的意思是:在行上增加一个纬度,列上选择所有列
    [np.newaxis,0:1]:则是意思选出一列从0到1不包括1 在行增加一个维度
    [0:2,np.newaxis] :按行取取出的一行中的每一个元素 ,增加一个维度

    a = np.array([1,2,3])[np.newaxis,0:1]
    print(a) #   [[1]]
    b = np.array([1,2,3])[0:2,np.newaxis]
    '''
    [[1]
     [2]]
    '''
    
    a = np.array([1,2,3])[np.newaxis,:]#array => vector
    #[[1,2,3]] 
    print(a.T)
    c = np.array([4,5,6])[np.newaxis,:]
    d = np.array([11,11,11])
    print(d)
    print(a)
    '''
    [[1]
     [2]
     [3]]
    [11 11 11]
    [[1 2 3]]
    '''
    

    矩阵的组合

    三行一列的矩阵a 和 c
    分别按照行 axis = 1 (行) 和 axis = 0 (列) 组合
    按行组合就是直接加到右侧(要求相同的行数)
    按列就是直接加到下侧(要求相同的列数)

    a = np.array([1,2,3]).reshape((3,1))
    print(a)
    c = np.array([4,5,6]).reshape((3,1))
    print(c)
    print(np.concatenate((a,c),axis = 1))
    print(np.concatenate((a,c),axis = 0)
    
    '''
    #(3,2)shape
    [[1 4]
     [2 5]
     [3 6]]
    #(6,1)shape
    [[1] [2] [3] [4] [5] [6]]
    '''
    

    hstack 代表的是 concatenate 的axis = 1(行合并)
    vstack 代表的是 concatenate 的axis = 0(列合并)

    d = np.hstack((a,c))
    print(d)
    e = np.vstack((a,c))
    print(e)
    

    还可以实现多个 矩阵的组合

    a = np.array([1,2,3]).reshape((3,1))
    c = np.array([4,5,6]).reshape((3,1))
    d = np.hstack((a,c))
    e = np.hstack((a,c,d))#(a,c,d) this tuple can have many matrix!
    print(e)
    

    矩阵的分割

    np.split(a,3,axis = 0)三个参数
    a: 要被分割的矩阵
    3:分割的份数必须是在被分割维度上可以整除
    axis = 1(被保留的是行数【分割后行数不变】,就是说按列分割)
    axis = 0(被保留的是列数【分割后列数不变】,就是说按行分割)

    a = np.arange(12).reshape((3,4))
    print(a)
    print(np.split(a,3,axis = 0))
    
    '''
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    '''
    #[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
    #注意返回值是一个一个的array里面包含着matrix
    

    另外一种分割方式
    hsplit : 和axis = 1的情况一样 都是保留行数的分割方式
    同理 还有vsplit

    a = np.arange(12).reshape((3,4))
    print(a)
    print(np.split(a,2,axis = 1))
    print(np.hsplit(a,2)
    

    copy

    a = np.arange(4)
    b = a
    c = a.copy()
    if b is a:
        print('b is a')
    if c is a:
        print('c is a')
    

    相关文章

      网友评论

        本文标题:numpy 学习

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