有没有一种方法可以更好地理解函数背后的逻辑,而不仅仅是使用它/尝试执行错误或引用文档?例如tolist()
我在Google上进行搜索,没有找到可以参考或重新创建的源代码。我想了解某些功能的基本构建块。还是了解第三方功能/软件包的更好建议?
答案 0 :(得分:3)
Andrew Bowling是对的,源代码在github.com/numpy/numpy上。但是,有更简单的方法。
例如,假设我要查找numpy.cumsum
的实现:
另一种方法是克隆存储库并使用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 / scipy上出现StackOverflow / Github问题无济于事时,检查numpy的实现才是值得的。 numpy / scipy社区非常好。
答案 1 :(得分:2)
我相信Numpy Github repository有很多源代码。
答案 2 :(得分:0)
使用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
,而不仅仅是{{1} },我以np.tolist
为例。