zoukankan      html  css  js  c++  java
  • 【400】numpy.pad 为数组加垫(迷宫类题目)

    参考:Numpy学习——数组填充np.pad()函数的应用


    举例说明:

    import numpy as np
    a = np.zeros((3, 4), dtype=int)
    a
    
    array([[0, 0, 0, 0],
           [0, 0, 0, 0],
           [0, 0, 0, 0]])
    
    # pad(array, pad_width, mode, **kwargs)
    # array: array_like
    # pad_ ((1, 2), (3, 4))
    #    1: width of top
    #    2: width of bottom
    #    3: width of left
    #    4: width of right
    # mode: str or function
    #    'constant': Pads with a constant value
    # constant_values: Used in 'constant'. The values to set the padded values for each axis.
    #    ((1, 2), (3, 4))
    #    1: value of top
    #    2: value of bottom
    #    3: vlaue of left
    #    4: vlaue of right
    np.pad(a, ((1, 2), (3, 4)), 'constant', constant_values=((1, 2), (3, 4)))
    
    array([[3, 3, 3, 1, 1, 1, 1, 4, 4, 4, 4],
           [3, 3, 3, 0, 0, 0, 0, 4, 4, 4, 4],
           [3, 3, 3, 0, 0, 0, 0, 4, 4, 4, 4],
           [3, 3, 3, 0, 0, 0, 0, 4, 4, 4, 4],
           [3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4],
           [3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4]])
    
    # (1, 2)
    # top:bottom=1:2
    # left:right=1:2
    np.pad(a, (1, 2), 'constant', constant_values=(1, 2))
    
    array([[1, 1, 1, 1, 1, 2, 2],
           [1, 0, 0, 0, 0, 2, 2],
           [1, 0, 0, 0, 0, 2, 2],
           [1, 0, 0, 0, 0, 2, 2],
           [1, 2, 2, 2, 2, 2, 2],
           [1, 2, 2, 2, 2, 2, 2]])
    
    a = [1, 2, 3, 4, 5]
    np.pad(a, (2, 3), 'constant', constant_values=(4, 6))
    
    array([4, 4, 1, 2, 3, 4, 5, 6, 6, 6])
    
    # mode: 'edge': Pads with the edge values of array
    np.pad(a, (2, 3), 'edge')
    
    array([1, 1, 1, 2, 3, 4, 5, 5, 5, 5])
    
    np.pad(a, (2, 3), 'linear_ramp', end_values=(5, 1))
    
    array([5, 3, 1, 2, 3, 4, 5, 4, 2, 1])
    
    np.pad(a, (2, 3), 'maximum')
    
    array([5, 5, 1, 2, 3, 4, 5, 5, 5, 5])
    
    np.pad(a, (2, 3), 'mean')
    
    array([3, 3, 1, 2, 3, 4, 5, 3, 3, 3])
    
    np.pad(a, (2, 3), 'median')
    
    array([3, 3, 1, 2, 3, 4, 5, 3, 3, 3])
    
    a = [[1, 2], [3, 4]]
    np.pad(a, (2, 3), 'minimum')
    
    array([[1, 1, 1, 2, 1, 1, 1],
           [1, 1, 1, 2, 1, 1, 1],
           [1, 1, 1, 2, 1, 1, 1],
           [3, 3, 3, 4, 3, 3, 3],
           [1, 1, 1, 2, 1, 1, 1],
           [1, 1, 1, 2, 1, 1, 1],
           [1, 1, 1, 2, 1, 1, 1]])
    

    语法说明:

    >>> help(np.pad)
    Help on function pad in module numpy.lib.arraypad:
    
    pad(array, pad_width, mode, **kwargs)
        Pads an array.
        
        Parameters
        ----------
        array : array_like of rank N
            Input array
        pad_width : {sequence, array_like, int}
            Number of values padded to the edges of each axis.
            ((before_1, after_1), ... (before_N, after_N)) unique pad widths
            for each axis.
            ((before, after),) yields same before and after pad for each axis.
            (pad,) or int is a shortcut for before = after = pad width for all
            axes.
        mode : str or function
            One of the following string values or a user supplied function.
        
            'constant'
                Pads with a constant value.
            'edge'
                Pads with the edge values of array.
            'linear_ramp'
                Pads with the linear ramp between end_value and the
                array edge value.
            'maximum'
                Pads with the maximum value of all or part of the
                vector along each axis.
            'mean'
                Pads with the mean value of all or part of the
                vector along each axis.
            'median'
                Pads with the median value of all or part of the
                vector along each axis.
            'minimum'
                Pads with the minimum value of all or part of the
                vector along each axis.
            'reflect'
                Pads with the reflection of the vector mirrored on
                the first and last values of the vector along each
                axis.
            'symmetric'
                Pads with the reflection of the vector mirrored
                along the edge of the array.
            'wrap'
                Pads with the wrap of the vector along the axis.
                The first values are used to pad the end and the
                end values are used to pad the beginning.
            <function>
                Padding function, see Notes.
        stat_length : sequence or int, optional
            Used in 'maximum', 'mean', 'median', and 'minimum'.  Number of
            values at edge of each axis used to calculate the statistic value.
        
            ((before_1, after_1), ... (before_N, after_N)) unique statistic
            lengths for each axis.
        
            ((before, after),) yields same before and after statistic lengths
            for each axis.
        
            (stat_length,) or int is a shortcut for before = after = statistic
            length for all axes.
        
            Default is ``None``, to use the entire axis.
        constant_values : sequence or int, optional
            Used in 'constant'.  The values to set the padded values for each
            axis.
        
            ((before_1, after_1), ... (before_N, after_N)) unique pad constants
            for each axis.
        
            ((before, after),) yields same before and after constants for each
            axis.
        
            (constant,) or int is a shortcut for before = after = constant for
            all axes.
        
            Default is 0.
        end_values : sequence or int, optional
            Used in 'linear_ramp'.  The values used for the ending value of the
            linear_ramp and that will form the edge of the padded array.
        
            ((before_1, after_1), ... (before_N, after_N)) unique end values
            for each axis.
        
            ((before, after),) yields same before and after end values for each
            axis.
        
            (constant,) or int is a shortcut for before = after = end value for
            all axes.
        
            Default is 0.
        reflect_type : {'even', 'odd'}, optional
            Used in 'reflect', and 'symmetric'.  The 'even' style is the
            default with an unaltered reflection around the edge value.  For
            the 'odd' style, the extended part of the array is created by
            subtracting the reflected values from two times the edge value.
        
        Returns
        -------
        pad : ndarray
            Padded array of rank equal to `array` with shape increased
            according to `pad_width`.
        
        Notes
        -----
        .. versionadded:: 1.7.0
        
        For an array with rank greater than 1, some of the padding of later
        axes is calculated from padding of previous axes.  This is easiest to
        think about with a rank 2 array where the corners of the padded array
        are calculated by using padded values from the first axis.
        
        The padding function, if used, should return a rank 1 array equal in
        length to the vector argument with padded values replaced. It has the
        following signature::
        
            padding_func(vector, iaxis_pad_width, iaxis, kwargs)
        
        where
        
            vector : ndarray
                A rank 1 array already padded with zeros.  Padded values are
                vector[:pad_tuple[0]] and vector[-pad_tuple[1]:].
            iaxis_pad_width : tuple
                A 2-tuple of ints, iaxis_pad_width[0] represents the number of
                values padded at the beginning of vector where
                iaxis_pad_width[1] represents the number of values padded at
                the end of vector.
            iaxis : int
                The axis currently being calculated.
            kwargs : dict
                Any keyword arguments the function requires.
        
        Examples
        --------
        >>> a = [1, 2, 3, 4, 5]
        >>> np.pad(a, (2,3), 'constant', constant_values=(4, 6))
        array([4, 4, 1, 2, 3, 4, 5, 6, 6, 6])
        
        >>> np.pad(a, (2, 3), 'edge')
        array([1, 1, 1, 2, 3, 4, 5, 5, 5, 5])
        
        >>> np.pad(a, (2, 3), 'linear_ramp', end_values=(5, -4))
        array([ 5,  3,  1,  2,  3,  4,  5,  2, -1, -4])
        
        >>> np.pad(a, (2,), 'maximum')
        array([5, 5, 1, 2, 3, 4, 5, 5, 5])
        
        >>> np.pad(a, (2,), 'mean')
        array([3, 3, 1, 2, 3, 4, 5, 3, 3])
        
        >>> np.pad(a, (2,), 'median')
        array([3, 3, 1, 2, 3, 4, 5, 3, 3])
        
        >>> a = [[1, 2], [3, 4]]
        >>> np.pad(a, ((3, 2), (2, 3)), 'minimum')
        array([[1, 1, 1, 2, 1, 1, 1],
               [1, 1, 1, 2, 1, 1, 1],
               [1, 1, 1, 2, 1, 1, 1],
               [1, 1, 1, 2, 1, 1, 1],
               [3, 3, 3, 4, 3, 3, 3],
               [1, 1, 1, 2, 1, 1, 1],
               [1, 1, 1, 2, 1, 1, 1]])
        
        >>> a = [1, 2, 3, 4, 5]
        >>> np.pad(a, (2, 3), 'reflect')
        array([3, 2, 1, 2, 3, 4, 5, 4, 3, 2])
        
        >>> np.pad(a, (2, 3), 'reflect', reflect_type='odd')
        array([-1,  0,  1,  2,  3,  4,  5,  6,  7,  8])
        
        >>> np.pad(a, (2, 3), 'symmetric')
        array([2, 1, 1, 2, 3, 4, 5, 5, 4, 3])
        
        >>> np.pad(a, (2, 3), 'symmetric', reflect_type='odd')
        array([0, 1, 1, 2, 3, 4, 5, 5, 6, 7])
        
        >>> np.pad(a, (2, 3), 'wrap')
        array([4, 5, 1, 2, 3, 4, 5, 1, 2, 3])
        
        >>> def pad_with(vector, pad_width, iaxis, kwargs):
        ...     pad_value = kwargs.get('padder', 10)
        ...     vector[:pad_width[0]] = pad_value
        ...     vector[-pad_width[1]:] = pad_value
        ...     return vector
        >>> a = np.arange(6)
        >>> a = a.reshape((2, 3))
        >>> np.pad(a, 2, pad_with)
        array([[10, 10, 10, 10, 10, 10, 10],
               [10, 10, 10, 10, 10, 10, 10],
               [10, 10,  0,  1,  2, 10, 10],
               [10, 10,  3,  4,  5, 10, 10],
               [10, 10, 10, 10, 10, 10, 10],
               [10, 10, 10, 10, 10, 10, 10]])
        >>> np.pad(a, 2, pad_with, padder=100)
        array([[100, 100, 100, 100, 100, 100, 100],
               [100, 100, 100, 100, 100, 100, 100],
               [100, 100,   0,   1,   2, 100, 100],
               [100, 100,   3,   4,   5, 100, 100],
               [100, 100, 100, 100, 100, 100, 100],
               [100, 100, 100, 100, 100, 100, 100]])
    
  • 相关阅读:
    【原创】大数据基础之Hadoop(3)yarn数据收集与监控
    【原创】运维基础之Docker(7)关于docker latest tag
    【原创】大数据基础之ElasticSearch(4)es数据导入过程
    【原创】大叔经验分享(44)hdfs副本数量
    【转】IAR IDE for MSP430、8051、ARM等平台的结合使用
    写驱动的步骤
    【转】IAR for STM8介绍、下载、安装与注册
    KEIL中函数定义存在但go to definition却不跳转的原因
    FatFs
    学习2__STM32--汉字显示
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/10740554.html
Copyright © 2011-2022 走看看