为了了解NumPy的源代码,我想从添加自己的伪自定义函数开始。我已经按照他们的文档建立了一个开发环境,并按照建议($ python setup.py build_ext -i; export PYTHONPATH=$PWD
(对NumPy进行了就地构建。
现在我想添加这个功能:
def multiplybytwo(x):
"""
Return the double of the input
"""
y = x*2
return y
但我不知道把它放在哪里,这样代码才能正常运行:
import numpy as np
a = np.array([10])
b = np.mulitplybytwo(a)
这个答案是应OP的要求添加的。
正如我在上面的评论中所提到的,(许多(起点是研究numpy库中的顶级__init__.py
文件。破解这个打开并阅读各种导入和初始化设置。这将有助于了解新函数的位置,正如您可能从其他(熟悉的(顶级函数的导入位置看到的那样。
注意:
虽然我通常不鼓励将自定义功能添加到库中(因为升级时所有更改都会丢失(,但我理解为什么您会对此进行研究。只要记住前一句话中所说的内容。
Python中的所有东西都是一个对象!
所以,你可以把你的函数添加到NumPy中,就像你说x = 1
一样
见下文:
>>> def multiplybytwo(x):
... """
... Return the double of the input
... """
... y = x*2
... return y
>>> import numpy as np
>>> np.mulitplybytwo = multiplybytwo ## HERE IS THE "TRICK"
>>> a = np.array([10])
>>> b = np.mulitplybytwo(a)
>>> b
array([20])
>>> print(b)
[20]
在这一行中,您在NumPy中创建了一个自定义函数,并表示该函数是您定义的函数。
您可以使用id
进行校样
>>> id(np.multiplybytwo)
140489045965856
>>> id(multiplybytwo)
140489045965856
>>>
两个id
是相同的。
如果你想把你的函数添加到Numpy,我会:
- 克隆github repo
git clone https://github.com/numpy/numpy.git
- 在
/numpy/core
中的某个位置编写函数 - 编译它:
python setup.py build_ext --inplace
--有关编译/安装的更多信息:https://numpy.org/doc/stable/user/building.html - 要想更深入地了解Numpy,请查看如何做出贡献:https://numpy.org/devdocs/dev/index.html