美文网首页
numpy重点

numpy重点

作者: zhouyilian | 来源:发表于2017-12-10 08:54 被阅读0次

    1 概览

    用来处理大型矩阵,运算效率比列表更高效。
    轴:维度
    秩:轴的个数
    如:[[1,0,0],[0,1,2]] ,秩为2,第一个维度长度为2,第二个维度长度为3

    ndarray

    numpy的数组类,numpy.array 不同于 python库类array.array,后者只处理一维数组

    对象属性
    • ndarray.ndim:秩
    • ndarray.shape:维度,如n排m列的矩阵,shape属性为(2,3),指示每个维度上的大小
    • ndarray.size:数组元素的总个数,2*3
    • ndarray.dtype:描述数组中元素类型的对象
    • ndarray.itemsize:数组中每个元素的字节大小,如float:8
    • ndarray.data:不常用
    import numpy as np
    data=[1,2,3,4,5]
    array1=np.array(data)
    print(array1)
    #输出 [1,2,3,4,5]
    #array1: array([1,2,3,4,5])
    

    嵌套列表会被转换为一个多维数组,也被称为矩阵

    data=[[1,3,4],[2,5,6]]
    array=np.array(data)
    print(array)
    #输出
    [[1,3,4],
      [2,5,6]] 
    #array([[1,3,4],[2,5,6]])
    

    2 创建数组

    array()函数
    a=array([2,3,4]):从列表推导来
    a=array([(1.5,2,3),(4,5,6)]):从序列包含序列得来
    

    注意:只能由数值组成的列表作为一个参数,错误:b=array(1,2,3)

    zero():创建全是0的数组
    zero((3,4))
    ## array([[ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])
    
    ones():创建全1的数组
    ones((2,3,4),dtype=int16)
    ##
    array([[[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]],
    
           [[1, 1, 1, 1],
            [1, 1, 1, 1],
            [1, 1, 1, 1]]], dtype=int16)
    
    empty():创建内容随机,默认float型
    empty((2,3))
    ##
    array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.]])
    
    arrange():创建数列,返回数组而不是列表
    arrane(10,30,5)
    ##输出
    array([10,15,20,25)]
    

    3 打印数组

    NumPy以类似嵌套列表的形式显示它,但是呈以下布局:

    • 最后的轴从左到右打印
      -次后的轴从顶向下打印
    • 剩下的轴从顶向下打印,每个切片通过一个空行与下一个隔开
    • 一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。
    b=arrange(12).reshape(4,3)
    print(b)
    ##
    [[ 0  1  2]
     [ 3  4  5]
     [ 6  7  8]
     [ 9 10 11]]
    
    c = arange(24).reshape(2,3,4)         # 3d array
    print (c)
    [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
    
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]
    

    (注意哦,打印时没有逗号分隔,如果输出对象形式array([])时是有逗号的。。。)

    4 基本运算

    数组的基本运算是按元素的,比如注意

    a=array(20,30,40,50)
    a<35
    ##
    array([ True, True, False, False], dtype=bool)
    

    注意: *是指按元素计算,dot()才是矩阵乘法

    //*
    A=array( [[ 1,1],
                    [ 0,1]] )
    B=array( [[ 2,0],
                    [[3,4])
    A*B
    array([[ 2,0 ],
                [0,4])
    //dot()
    dot(A,B)
    array([[5, 4],
           [3, 4]])
    

    当运算的是不同类型的数组时,和其它语言一样处理
    许多非数组运算,被作为ndarray类的方法实现,如a.sum(), a.min(), a.max(), 它们无关数组的形状,被当作数字组成 的列表。指定axis,可以把运算应用到数组指定的轴上

    b = arange(12).reshape(3,4)
    b
    ##
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    b.sum(axis=0) 
    ##
    array([12, 15, 18, 21])
    

    5 通用函数ufunc

    数学函数sin,cos,exp等,作用于数组元素,产生一个数组作为输出

    6 索引,切片和迭代

    http://blog.csdn.net/liangzuojiayi/article/details/51534164

    形状操作

    由它每个轴上的元素个数给出:

    a = floor (10*random.random((3,4)))
    a
    ##
    array([[ 6.,  7.,  4.,  3.],
           [ 0.,  0.,  2.,  6.],
           [ 7.,  7.,  8.,  6.]])
    a.shape
    ##
    (3,4)
    

    修改

    a.ravel() //flatten the array
    ## array([ 6.,  7.,  4.,  3.,  0.,  0.,  2.,  6.,  7.,  7.,  8.,  6.])
    a.shape=(6,2)
    a.transpose()
    ##
    array([[ 6.,  4.,  0.,  2.,  7.,  8.],
           [ 7.,  3.,  0.,  6.,  7.,  6.]])
    a.resize((2,6))
    ##
    array([[ 6.,  7.,  4.,  3.,  0.,  0.],
           [ 2.,  6.,  7.,  7.,  8.,  6.]])
    
    组合

    vstack():纵向合并
    hstack():横向合并

    分割

    hsplit:沿水平轴分割,或返回相同形状数组的个数,或指定在哪些列后发生分割
    vsplit:沿纵向轴分割

    array([[ 3.,  7.,  0.,  6.,  0.,  6.,  8.,  5.,  8.,  2.,  7.,  1.],
           [ 7.,  7.,  2.,  3.,  4.,  8.,  8.,  5.,  2.,  5.,  5.,  4.]])
    hsplit(a,3)
    ##
    [array([[ 3.,  7.,  0.,  6.],
            [ 7.,  7.,  2.,  3.]]), array([[ 0.,  6.,  8.,  5.],
            [ 4.,  8.,  8.,  5.]]), array([[ 8.,  2.,  7.,  1.],
            [ 2.,  5.,  5.,  4.]])]
    hsplit(a,(3,4))
    ##
    [array([[ 3.,  7.,  0.],
            [ 7.,  7.,  2.]]), array([[ 6.],
            [ 3.]]), array([[ 0.,  6.,  8.,  5.,  8.,  2.,  7.,  1.],
            [ 4.,  8.,  8.,  5.,  2.,  5.,  5.,  4.]])]
    

    复制和视图

    浅复制
    赋值:对原数组有影响
    视图:不影响

    c =  a.view()
    c.shape=2,6
    a.shape  //shape  doesn't change
    ##
    (3,4)
    c[0,4] = 1234
    a
    ##
    array([[   0,    1,    2,    3],
           [1234,    5,    6,    7],
           [   8,    9,   10,   11]])  //data change
    

    深复制

    d =  a.copy()
    d[0,0]=9999
    //对a不会有影响
    

    相关文章

      网友评论

          本文标题:numpy重点

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