Search code examples
pythonnumpygradient-descent

DeprecationWarning: 'shape' argument should be used instead of 'dims'


In my practice on Gradient Descent, to plot the MSE in a 3d Graph, following code is use :

ij_min = np.unravel_index(indices=plot_cost.argmin(), dims=plot_cost.shape)

ij_min are the theta0 and theta1 values in the linear regression while plot_cost is the MSE array.

While running the above command, I got the following deprecation warning :

:2: DeprecationWarning: 'shape' argument should be used instead of 'dims'

I am confused as to what should be used in place of dims=plot_cost.shape.

Can someone help please ?


Solution

  • The DeprecationWarning indicates that the keyword argument dims is available but its use is discouraged because it will be removed in a future version. Instead of dims, shape should be used. This can be done like so:

    ij_min = np.unravel_index(indices=plot_cost.argmin(), shape=plot_cost.shape)
    

    The help function is a useful tool for examining the public documentation of Python functions and classes.

    help(np.unravel_index)
    
    Help on function unravel_index in module numpy:
    
    unravel_index(...)
        unravel_index(indices, shape, order='C')
    
        Converts a flat index or array of flat indices into a tuple
        of coordinate arrays.
    
        Parameters
        ----------
        indices : array_like
            An integer array whose elements are indices into the flattened
            version of an array of dimensions ``shape``. Before version 1.6.0,
            this function accepted just one index value.
        shape : tuple of ints
            The shape of the array to use for unraveling ``indices``.
    
            .. versionchanged:: 1.16.0
                Renamed from ``dims`` to ``shape``.
    
        order : {'C', 'F'}, optional
            Determines whether the indices should be viewed as indexing in
            row-major (C-style) or column-major (Fortran-style) order.
    
            .. versionadded:: 1.6.0
    
        Returns
        -------
        unraveled_coords : tuple of ndarray
            Each array in the tuple has the same shape as the ``indices``
            array.
    
        See Also
        --------
        ravel_multi_index
    
        Examples
        --------
        >>> np.unravel_index([22, 41, 37], (7,6))
        (array([3, 6, 6]), array([4, 5, 1]))
        >>> np.unravel_index([31, 41, 13], (7,6), order='F')
        (array([3, 6, 6]), array([4, 5, 1]))
    
        >>> np.unravel_index(1621, (6,7,8,9))
        (3, 1, 4, 1)
    

    You'll note that dims is unavailable in my version of numpy, 1.18.1. The help output indicates that dims was removed in version 1.16.0.