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]])
    
  • 相关阅读:
    hdoj5667 BestCoder Round #80 【费马小定理(膜拜)+矩阵快速幂+快速幂】
    几题LCS后的小总结
    uva12563
    hdoj1028;他们说这题叫dp...
    鉴于spfa基础上的差分约束算法
    BFS+PRIM
    优先队列(转载)【非常棒】
    BestCoder Round #73 (div.2)1002/hdoj5631
    zoj2412 dfs连通图
    dijkstra算法的应用(poj2387)+堆优化【还没学C艹很尴尬,不理解的先不写了,未完,待续...】
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/10740554.html
Copyright © 2011-2022 走看看