• numpy 添加删除去重及形状变换


    一、数组的添加删除与去重

    下面是几个常见的数组操作:

    1. append:将值添加到数组末尾
    2. insert: 沿指定轴将值插入到指定下标之前
    3. delete: 返回删掉某个轴的子数组的新数组
    4. unique: 寻找数组内的唯一元素
    >>> a = np.array([[1,2,3],[4,5,6]]) 
    >>> np.append(a, [7,8,9])  # 附加后,变成了一维的
    array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> a  #原来的数组没有改变
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> a.append([10,11,12]) # ndarray没有这个方法
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-165-a36f3ca1308b> in <module>()
    ----> 1 a.append([10,11,12])
    
    AttributeError: 'numpy.ndarray' object has no attribute 'append'
    >>> np.append(a, [[7,8,9]],axis = 0)  # 注意参数格式
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    
    >>> a = np.array([[1,2],[3,4],[5,6]])
    >>> np.insert(a,3,[11,12])  # 在3号位置前插入,变成一维了
    array([ 1,  2,  3, 11, 12,  4,  5,  6])
    >>> a
    array([[1, 2],
           [3, 4],
           [5, 6]])
    >>> np.insert(a,1,[11],axis = 0) # 按行插入
    array([[ 1,  2],
           [11, 11],
           [ 3,  4],
           [ 5,  6]])
    >>> np.insert(a,1,[11],axis = 1) #按列插入
    array([[ 1, 11,  2],
           [ 3, 11,  4],
           [ 5, 11,  6]])
    
    >>> a = np.arange(12).reshape(3,4)
    >>> a
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>> np.delete(a,5)# 删除指定位置的元素后,变成一维了
    array([ 0,  1,  2,  3,  4,  6,  7,  8,  9, 10, 11])
    >>> np.delete(a,1,axis = 0)
    array([[ 0,  1,  2,  3],
           [ 8,  9, 10, 11]])
    >>> a  # 并不会修改原来的数组
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>> np.delete(a,1,axis = 1)
    array([[ 0,  2,  3],
           [ 4,  6,  7],
           [ 8, 10, 11]])

    unique是numpy中非常重要的方法:

    >>> a = np.array([0,1,4,7,2,1,4,3])
    >>> a
    array([0, 1, 4, 7, 2, 1, 4, 3])
    >>> np.unique(a)
    array([0, 1, 2, 3, 4, 7])
    >>> b = np.array([[0,1,4,],[7,2,1],[4,3,0]])
    >>> b
    array([[0, 1, 4],
           [7, 2, 1],
           [4, 3, 0]])
    >>> np.unique(b)
    array([0, 1, 2, 3, 4, 7])
    >>> np.unique(b,axis=0)
    array([[0, 1, 4],
           [4, 3, 0],
           [7, 2, 1]])
    >>> np.unique(b,axis=1)
    array([[0, 1, 4],
           [7, 2, 1],
           [4, 3, 0]])
    >>> b = np.array([[0,1,4,],[7,2,1],[4,3,0],[0,1,4,]])
    >>> b
    array([[0, 1, 4],
           [7, 2, 1],
           [4, 3, 0],
           [0, 1, 4]])
    np.unique(b,axis=0)
    array([[0, 1, 4],
           [4, 3, 0],
           [7, 2, 1]])

    二、数组的形状变换

    之前介绍过,可以通过数组的shape属性,查看它的形状:

    >>> a = np.floor(10*np.random.random((3,4)))
    >>> a
    array([[ 2.,  8.,  0.,  6.],
           [ 4.,  5.,  1.,  1.],
           [ 8.,  9.,  3.,  6.]])
    >>> a.shape
    (3, 4)

    上面的例子中,先通过numpy的random函数生成一个随机3行4列数组,再对每个元素乘10,最后用floor函数取整。

    有很多数组方法可以变换它的形状,并且不修改原始数组本身:

    >>> a.ravel()  # 平铺数组成为一维数组
    array([ 2.,  8.,  0.,  6.,  4.,  5.,  1.,  1.,  8.,  9.,  3.,  6.])
    >>> a.reshape(6,2)  # 调整形状
    array([[ 2.,  8.],
           [ 0.,  6.],
           [ 4.,  5.],
           [ 1.,  1.],
           [ 8.,  9.],
           [ 3.,  6.]])
    >>> a.T  # 返回转置数组
    array([[ 2.,  4.,  8.],
           [ 8.,  5.,  9.],
           [ 0.,  1.,  3.],
           [ 6.,  1.,  6.]])
    >>> a.T.shape
    (4, 3)
    >>> a.shape
    (3, 4)

    reshape方法不会修改数组本身,resize则正好相反:

    >>> a
    array([[ 2.,  8.,  0.,  6.],
           [ 4.,  5.,  1.,  1.],
           [ 8.,  9.,  3.,  6.]])
    >>> a.resize((2,6))
    >>> a
    array([[ 2.,  8.,  0.,  6.,  4.,  5.],
           [ 1.,  1.,  8.,  9.,  3.,  6.]])
    >>> a.resize((2,7)) # 突发奇想,作死试试
    alueError                                Traceback (most recent call last)
    <ipython-input-162-8df1a3f67bca> in <module>()
    ----> 1 a.resize(2,7)
    
    ValueError: cannot resize an array that references or is referenced
    by another array in this way.  Use the resize function
    
    >>> np.resize(a, (2,7)) # 但是...居然可以这么干!
    array([[2., 8., 0., 6., 4., 5., 1.],
           [1., 8., 9., 3., 6., 2., 8.]])
    
    # 再次提醒,在numpy中有各种类似的坑,你根本踩不过来,所以不要尝试一些自己不确定的东西。

    如果reshape方法的一个参数是-1,那么这个参数的实际值会自动计算得出:

    >>> a.reshape(3,-1)
    array([[ 2.,  8.,  0.,  6.],
           [ 4.,  5.,  1.,  1.],
           [ 8.,  9.,  3.,  6.]])
  • 相关阅读:
    FastStone Capture(FSCapture) 注册码
    Qt下开发及调用带界面的DLL
    Gin生成证书开启HTTPS
    Gin+Vue3开启nginx gzip但是不生效。
    GIn+Docker+docer-compose
    Go字符串切片
    Vue使用AG Grid嵌套element-plus
    GIN转换UTC时间
    GORM对实现datetime和date类型时间
    (二)PaddleOCR 编译 ocr_system.dll
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12630748.html
Copyright © 2020-2023  润新知