有没有办法在 numpy 上查看某些函数的源代码



有没有办法更好地理解函数背后的逻辑,而不仅仅是使用它/尝试错误或参考文档? 例如 tolist((

我在谷歌上搜索过,没有找到可以参考或重新创建的源代码。我想了解某些功能的基本构建块。或者有什么更好的建议来了解第三方功能/包?

Andrew Bowling是对的,源代码在 github.com/numpy/numpy 上。但是,有更简单的方法。

例如,假设我想找到numpy.cumsum的实现:

  1. 谷歌它。您将找到文档页面
  2. 单击文档页面上的 [源]。
  3. 请记住,实现可能比阅读文档复杂得多。大部分是用 fortran 编写的。

另一种方法是克隆存储库并使用 grep

$ grep -rnil "cumsum" * --exclude-dir=doc/ --exclude-dir=benchmarks/
numpy/random/mtrand/mtrand.pyx
numpy/lib/recfunctions.py
numpy/lib/_iotools.py
numpy/lib/shape_base.py
numpy/lib/histograms.py
numpy/lib/arraysetops.py
numpy/lib/function_base.py
numpy/lib/nanfunctions.py
numpy/lib/tests/test_function_base.py
numpy/lib/tests/test_nanfunctions.py
numpy/lib/info.py
numpy/matrixlib/tests/test_interaction.py
numpy/core/include/numpy/ufuncobject.h
numpy/core/src/multiarray/methods.c
numpy/core/src/multiarray/calculation.c
numpy/core/src/multiarray/calculation.h
numpy/core/src/multiarray/scalartypes.c.src
numpy/core/src/umath/_umath_tests.c.src
numpy/core/fromnumeric.py
numpy/core/code_generators/numpy_api.py
numpy/core/tests/test_ufunc.py
numpy/core/tests/test_regression.py
numpy/core/info.py
numpy/core/_add_newdocs.py
numpy/ma/core.py
numpy/ma/API_CHANGES.txt
numpy/ma/README.txt
numpy/ma/tests/test_core.py
numpy/ma/tests/test_old_ma.py

但是请:如果您是初学者并且无法在文档中找到解释 - 请询问。那要快得多。举出让你感到困惑的好例子,努力措辞问题。只有在您的问题非常具体并且 StackOverflow/numpy/scipy 上的 Github 问题无济于事的情况下,检查 numpy 的实现才值得。numpy/scipy的社区非常好。

我相信

Numpy Github存储库有很多源代码。

使用inspect库:

>>> import inspect
>>> print(inspect.getsource(np.cumsum))
def cumsum(a, axis=None, dtype=None, out=None):
    """
    Return the cumulative sum of the elements along a given axis.
    Parameters
    ----------
    a : array_like
        Input array.
    axis : int, optional
        Axis along which the cumulative sum is computed. The default
        (None) is to compute the cumsum over the flattened array.
    dtype : dtype, optional
        Type of the returned array and of the accumulator in which the
        elements are summed.  If `dtype` is not specified, it defaults
        to the dtype of `a`, unless `a` has an integer dtype with a
        precision less than that of the default platform integer.  In
        that case, the default platform integer is used.
    out : ndarray, optional
        Alternative output array in which to place the result. It must
        have the same shape and buffer length as the expected output
        but the type will be cast if necessary. See `doc.ufuncs`
        (Section "Output arguments") for more details.
    Returns
    -------
    cumsum_along_axis : ndarray.
        A new array holding the result is returned unless `out` is
        specified, in which case a reference to `out` is returned. The
        result has the same size as `a`, and the same shape as `a` if
        `axis` is not None or `a` is a 1-d array.

    See Also
    --------
    sum : Sum array elements.
    trapz : Integration of array values using the composite trapezoidal rule.
    diff :  Calculate the n-th discrete difference along given axis.
    Notes
    -----
    Arithmetic is modular when using integer types, and no error is
    raised on overflow.
    Examples
    --------
    >>> a = np.array([[1,2,3], [4,5,6]])
    >>> a
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> np.cumsum(a)
    array([ 1,  3,  6, 10, 15, 21])
    >>> np.cumsum(a, dtype=float)     # specifies type of output value(s)
    array([  1.,   3.,   6.,  10.,  15.,  21.])
    >>> np.cumsum(a,axis=0)      # sum over rows for each of the 3 columns
    array([[1, 2, 3],
           [5, 7, 9]])
    >>> np.cumsum(a,axis=1)      # sum over columns for each of the 2 rows
    array([[ 1,  3,  6],
           [ 4,  9, 15]])
    """
    try:
        cumsum = a.cumsum
    except AttributeError:
        return _wrapit(a, 'cumsum', axis, dtype, out)
    return cumsum(axis, dtype, out)
>>> 

但只适用于numpy中的函数,你可以做tolist,因为它是一个子函数,意思是,它是np.array.tolist的,而不仅仅是np.tolist,我举cumsum为例。

最新更新