Есть ли способ увидеть исходный код какой-либо функции на NumPy? - PullRequest
0 голосов
/ 07 февраля 2019

Есть ли способ лучше понять логику функции вместо того, чтобы просто использовать ее / попробовать ошибку или обратиться к doc?например, tolist ()

Я искал в Google и не нашел исходного кода, на который мог бы сослаться или воссоздать.Я хотел бы понять основной строительный блок какой-либо функции.Или какое-нибудь лучшее предложение, чтобы понять стороннюю функцию / пакет?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Эндрю Боулинг прав, исходный код на github.com / numpy / numpy .Однако есть более простые способы.

Например, допустим, я хочу найти для него реализацию numpy.cumsum:

  1. Google.Вы найдете страницу документации
  2. Нажмите на [source] на странице документации.
  3. Имейте в виду, что реализация может быть ДАЛЕЕсложнее, чем читать документы.Большие части написаны на .

Другой подход заключается в клонировании хранилища и использовании 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

Но, пожалуйста: если выначинающий, и вы не можете найти объяснение в документах - просто спросите.Это намного быстрее.Приведите хорошие примеры того, что вас смущает, приложите усилия, чтобы сформулировать вопрос.Спуск по кроличьей норе в проверке реализации numpy того стоит, только если ваш вопрос ОЧЕНЬ специфичен и если проблема StackOverflow / Github по numpy / scipy не может помочь.Сообщество для numpy / scipy очень хорошее.

0 голосов
/ 07 февраля 2019

Использовать 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 в качестве примера.

0 голосов
/ 07 февраля 2019

Я считаю, что в репозитории Numpy Github много исходного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...