美文网首页
学习笔记:Numpy

学习笔记:Numpy

作者: IT_小马哥 | 来源:发表于2020-10-09 14:36 被阅读0次

    np.array()

    • numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
      • object 数组或嵌套的数列
      • dtype 数组元素的数据类型,可选
      • copy 对象是否需要复制,可选
      • order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
      • subok 默认返回一个与基类类型一致的数组
      • ndmin 指定生成数组的最小维度
    a = np.array([1,  2,  3,4,5], ndmin =  2)  
    print (a)
    """
    [[1 2 3 4 5]]
    """
    

    shape和reshape

    • shape用于查看数组维度
    • reshape用于调整数组的维度
    import numpy as np
    a = np.array([[1,2,3],[4,5,6]])
    print(a.shape) 
    """
    (2, 3)
    """
    

    调整维度

    b = a.reshape(3,2)
    print(b)
    """
    [[1 2]
     [3 4]
     [5 6]]
    """
    print(b.shape)
    """
    (3, 2)
    """
    

    值得注意的是:reshape获取的不是原始数据的拷贝,和原始数组共享的同一内存地址。

    b[0][0] = 10
    print(b)
    """
    [[10  2]
     [ 3  4]
     [ 5  6]]
    """
    print(a)
    """
    [[10  2  3]
     [ 4  5  6]]
    """
    

    修改数组的形状并返回

    • numpy.resize(arr, shape)
    a = np.array([[1,2,3],[4,5,6]])
     
    print ('第一个数组:')
    print (a)
    print ('\n')
     
    print ('第一个数组的形状:')
    print (a.shape)
    print ('\n')
    b = np.resize(a, (3,2))
     
    print ('第二个数组:')
    print (b)
    print ('\n')
     
    print ('第二个数组的形状:')
    print (b.shape)
    print ('\n')
    # 要注意 a 的第一行在 b 中重复出现,因为尺寸变大了
     
    print ('修改第二个数组的大小:')
    b = np.resize(a,(3,3))
    print (b)
    """
    第一个数组:
    [[1 2 3]
     [4 5 6]]
    
    
    第一个数组的形状:
    (2, 3)
    
    
    第二个数组:
    [[1 2]
     [3 4]
     [5 6]]
    
    
    第二个数组的形状:
    (3, 2)
    
    
    修改第二个数组的大小:
    [[1 2 3]
     [4 5 6]
     [1 2 3]]
    """
    

    各种初始化

    • 参数说明:shape 是创建数组的形状, dtype是数据类型, order 有'C'和'F'两个选项,表示行优先和列优先
    • c = numpy.empty(shape, dytpe= float , order= 'C') 创建指定形状且未初始化的数组
    • numpy.zeros(shape, dytpe= float , order= 'C')创建指定形状且初始化为0的数组
    • numpy.ones(shape, dytpe= float , order= 'C')创建指定形状且初始化为1的数组
    x = np.ones([3,2], dtype = int)
    print(x)
    """
    [[1 1]
     [1 1]
     [1 1]]
    """
    

    np.arange()

    • numpy.arange(start, stop, step, dtype)
      • start 起始值,默认为0
      • stop 终止值(不包含)
      • step 步长,默认为1
      • dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
    x = np.arange(5)  
    print (x)
    """
    [0 1 2 3 4]
    """
    
    x = np.arange(10,20,2)  
    print (x)
    """
    [10 12 14 16 18]
    """
    

    切片和索引

    • 用python自带的slice()函数
    a = np.arange(10)
    s = slice(2,7,2) # 第一个参数是开始下标,第二个是结束下标,第三个是步长
    print(a[s])
    """
    [2 4 6]
    """
    
    • numpy的切片
      • 三个参数:第一个参数是开始下标,第二个是结束下标,第三个是步长
      • 一个参数就是直接索引,两个参数就是python常用的列表切片。
    b = a[2:7:2] 
    print(b)
    """
    [2 4 6]
    """
    
    • 切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。
    • 这个省略号就是表示该维度的数据需要全部取出来而已
    a = np.array([[[1,2,3],[4,5,6],[7,8,9]]]) 
    print(a.shape)
    """
    (1, 3, 3)
    """
    
    print(a[...,1])  # 前边的维度全部取,然后最后一个维度下标为1
    """
    [[2 5 8]]
    """
    
    print(a[0,...]) # 第一个维度的第0 维度,其他维度全部取
    """
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    """
    
    print(a[0,...,1]) # 第一个维度取0维,第二个维度全部取,最后一个维度下标为1
    """
    [2 5 8]
    """
    
    print(a[0,1])
    """
    [4 5 6]
    """
    

    切片操作

    a = np.array([[1,2,3], [4,5,6],[7,8,9]])
    print(a.shape)
    """
    (3, 3)
    """
    
    b = a[1:3, 1:3] # 第一个维度1-2,第二个维度1-2
    """
    [[5 6]
     [8 9]]
    """
    
    c = a[1:3,[1,2]]   #第一个维度1-2,第二个维度取下标1和下标2
    """
    [[5 6]
     [8 9]]
    """
    d = a[...,1:] # 第一个维度全取,第二个维度1-全部
    """
    [[2 3]
     [5 6]
     [8 9]]
    """
    

    广播机制

    • 一张图非常清楚


      广播机制
    a = np.array([[ 0, 0, 0],
               [10,10,10],
               [20,20,20],
               [30,30,30]])
    b = np.array([1,2,3])
    print(a + b)
    """
    [[ 1  2  3]
     [11 12 13]
     [21 22 23]
     [31 32 33]]
    """
    

    转置、迭代和复制

    • 转置就是a.T
    • 迭代就是np.nditer(a)
    b = a.T 
    for x in np.nditer(c):   # 迭代方式1
        print (x, end=", " )
    for item in a.flat: # 迭代方式2
        print(item)
    c = b.copy(order='C')  
    c = b.copy(order='F') 
    

    转换维度np.transpose(a)

    a = np.arange(12).reshape(3,4)
    print(a)
    print(np.transpose(a))
    print(a.T)
    """
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    [[ 0  4  8]
     [ 1  5  9]
     [ 2  6 10]
     [ 3  7 11]]
    [[ 0  4  8]
     [ 1  5  9]
     [ 2  6 10]
     [ 3  7 11]]
    """
    

    升维和降维

    • np.expand_dims(x, axis = 0)
    • z = np.squeeze(y)
    x = np.array(([1,2],[3,4]))
    print(x)
    print(x.shape)
    print('******')
    y = np.expand_dims(x, axis = 0)
    print(y)
    print(y.shape)
    print('******')
    z = np.squeeze(y)
    print(z)
    print(z.shape)
    """
    [[1 2]
     [3 4]]
    (2, 2)
    ******
    [[[1 2]
      [3 4]]]
    (1, 2, 2)
    ******
    [[1 2]
     [3 4]]
    (2, 2)
    """
    

    链接多个数组

    • numpy.concatenate((a1, a2, ...), axis)
    a = np.array([[1,2],[3,4]])
     
    print ('第一个数组:')
    print (a)
    print ('\n')
    b = np.array([[5,6],[7,8]])
     
    print ('第二个数组:')
    print (b)
    print ('\n')
    # 两个数组的维度相同
     
    print ('沿轴 0 连接两个数组:')
    print (np.concatenate((a,b)))
    print ('\n')
     
    print ('沿轴 1 连接两个数组:')
    print (np.concatenate((a,b),axis = 1))
    """
    第一个数组:
    [[1 2]
     [3 4]]
    
    
    第二个数组:
    [[5 6]
     [7 8]]
    
    
    沿轴 0 连接两个数组:
    [[1 2]
     [3 4]
     [5 6]
     [7 8]]
    
    
    沿轴 1 连接两个数组:
    [[1 2 5 6]
     [3 4 7 8]]
    """
    

    末尾插入

    • numpy.append(arr, values, axis=None)

    arr:输入数组
    values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)
    axis:默认为 None。当axis无定义时,是横向加成,返回总是为一维数组!当axis有定义的时候,分别为0和1的时候。当axis有定义的时候,分别为0和1的时候(列数要相同)。当axis为1时,数组是加在右边(行数要相同)。

    给定轴插入

    • numpy.insert(arr, obj, values, axis)

    arr:输入数组
    obj:在其之前插入值的索引
    values:要插入的值
    axis:沿着它插入的轴,如果未提供,则输入数组会被展开

    加减乘除

    • NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。
    • np.add(a,b)

    numpy.vdot(a,b)

    • 两个矩阵相乘等于一个数

    numpy.matmul(a,b)

    • 返回两个矩阵的乘积

    相关文章

      网友评论

          本文标题:学习笔记:Numpy

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