python - 我到底如何(以及为什么)可以通过 numpy.random 访问所有 NumPy?

标签 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 模块中见过的东西。看起来我可以通过 random 中的 np 变量使用 import numpy as np 访问所有内容。

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

如何将顶级模块提供给numpy.random,以及有什么动机让它可用吗?

最佳答案

所以在numpy/random/mtrand/mtrand.pyx line 146我们发现:

import numpy as np

从而将符号放入模块的命名空间中。这是Python,你可以访问。我想这行代码的存在与我们将其散布在模块中的原因相同,即该模块需要访问 numpy 功能。

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

from .mtrand import *

这关闭了循环并让我们通过numpy.random模块访问np

关于python - 我到底如何(以及为什么)可以通过 numpy.random 访问所有 NumPy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42616804/

相关文章:

c++ - 具有零范围的 uniform_int_distribution 进入无限循环

java - JUnit断言,值介于两个整数之间

python - 从 Qt 小部件应用程序调用 pyqt 小部件

python - 为什么 assert np.nan == np.nan 会导致错误?

python - 使用 for 循环和范围函数与 while 循环

Python - 拟合二维矩形数据

jquery - 在 Google App Engine 中实现无限滚动

python - 属性错误: 'LGBMRegressor' object has no attribute 'feature_name_'

python - 如何使用 pytest-mock 或 magicmock 模拟导入的对象

ios - 如何随机给 UILabel 上色