首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导入numpy与将numpy导入为np的区别

导入numpy与将numpy导入为np的区别
EN

Stack Overflow用户
提问于 2014-03-25 07:19:43
回答 5查看 106.7K关注 0票数 34

我理解在可能的情况下应该使用

代码语言:javascript
运行
复制
import numpy as np

这有助于避免由于名称空间而导致的任何冲突。但我注意到,虽然下面的命令可以正常工作

代码语言:javascript
运行
复制
import numpy.f2py as myf2py

以下内容不支持

代码语言:javascript
运行
复制
import numpy as np
np.f2py #throws no module named f2py

有人能解释一下这个吗?

EN

回答 5

Stack Overflow用户

发布于 2014-03-25 07:33:21

numpy是最顶层的包名,执行import numpy不会导入子模块numpy.f2py

当您执行import numpy时,它会创建一个指向numpy的链接,但numpy不会进一步链接到f2py。执行import numpy.f2py操作时,将建立链接

在上面的代码中:

代码语言:javascript
运行
复制
import numpy as np # np is an alias pointing to numpy, but at this point numpy is not linked to numpy.f2py
import numpy.f2py as myf2py # this command makes numpy link to numpy.f2py. myf2py is another alias pointing to numpy.f2py as well

下面是import numpy.f2pyimport numpy.f2py as myf2py之间的区别

  • import numpy.f2py numpy
  • 将numpy放入本地符号表(指向numpy),numpy链接到numpy.f2py
  • both numpynumpy.f2py为accessible

  • import numpy.f2py as myf2py parent
  • 将父编号放入本地符号表(指向numpy.f2py)
  • Its 不会添加到本地符号表中。因此,您无法访问numpy directly

票数 22
EN

Stack Overflow用户

发布于 2014-03-25 08:59:24

import as语法是在PEP 221中引入的,在那里有很好的文档记录。

当您通过导入模块时

代码语言:javascript
运行
复制
import numpy

numpy包被绑定到本地变量numpyimport as语法只允许您将导入绑定到您选择的本地变量名(通常是为了避免名称冲突,缩短详细的模块名称,或者使用兼容的API标准化对模块的访问)。

因此,

代码语言:javascript
运行
复制
import numpy as np

等同于,

代码语言:javascript
运行
复制
import numpy
np = numpy
del numpy

在试图理解这种机制时,值得记住的是,import numpy实际上就是import numpy as numpy

在导入子模块时,您必须引用完整的父模块名称,因为导入机制发生在比局部变量作用域更高的级别。即

代码语言:javascript
运行
复制
import numpy as np
import numpy.f2py   # OK
import np.f2py      # ImportError

我也反对你的断言,即“在可能的情况下,应该将numpy导入为np”。这样做是有历史原因的,主要是因为人们很快就厌倦了在每个操作前加上numpy。对我来说,它从未阻止过名称冲突(程序员的懒惰实际上表明与np发生冲突的可能性更高)

最后,为了结束我的演讲,这里有两个您应该知道的import as机制的有趣用法:

1.长子导入

代码语言:javascript
运行
复制
import scipy.ndimage.interpolation as warp
warp.affine_transform(I, ...)

2.兼容的APIs

代码语言:javascript
运行
复制
try:
    import pyfftw.interfaces.numpy_fft as fft
except:
    import numpy.fft as fft
# call fft.ifft(If) with fftw or the numpy fallback under a common name
票数 18
EN

Stack Overflow用户

发布于 2014-03-25 07:58:00

这是一种语言特性。f2py是模块numpy的子包,必须单独加载。

此功能允许:

  • 您可以只从numpy加载所需的包,从而加快执行速度。
  • f2py的开发人员可以将命名空间与另一个子包的开发人员分开。

但是请注意,import numpy.f2py或其变体import numpy.f2py as myf2py仍在加载父模块numpy

说过,当你跑步的时候

代码语言:javascript
运行
复制
import numpy as np
np.f2py

您会收到一个AttributeError,因为f2py不是numpy的属性,因为包numpy__init__()在其作用域中没有声明有关子包f2py的任何内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22622571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档