我是如何通过numpy.random访问所有NumPy的?(以及为什么)?

时间:2017-03-06 02:54:08

标签: python numpy random

导入

后,我正在查看numpy.random中可用的内容
from numpy import random 

使用dir(random),并注意到范围中有一个变量np,它看起来等同于顶级模块,例如

In[1]: from numpy import random

In[2]: random.np.fft.fft2
Out[2]: <function numpy.fft.fftpack.fft2>

In[3]: random.np.random.np.fft.np # not the same for fft

AttributeErrorTraceback (most recent call last)
<ipython-input-78-a64e04c36c80> in <module>()
----> 1 random.np.random.np.fft.np

AttributeError: module 'numpy.fft' has no attribute 'np'

这对我来说有点奇怪......或者至少不是我以前在其他Python模块中看到的东西。看起来我可以通过import numpy as np中的np变量通过random访问我所能做的一切。

我想知道子模块是如何使用的,所以我在源代码中查看了numpy/random/__init__.py,并没有看到它是如何可用的。我还在__all__查看numpy/random/info.py,但无法找到它如何暴露给模块。

顶级模块如何提供给numpy.random,是否有任何动机让它可用?

1 个答案:

答案 0 :(得分:2)

所以在numpy/random/mtrand/mtrand.pyx line 146我们找到了:

import numpy as np

因此将符号放入模块的命名空间中。哪个,这是python,你可以访问。我想这条线存在的原因与我们在模块上乱丢的一样,即该模块需要访问numpy功能。

并备份我们在/numpy/random/__init__.py line 99中找到的一个级别:

from .mtrand import *

关闭圈子,让我们通过np模块访问numpy.random