导入numpy和import numpy之间的区别为np

时间:2014-03-24 23:19:43

标签: python numpy

据我所知,如果可能,应该使用

import numpy as np

这有助于防止由命名空间引起的任何冲突。但我注意到,虽然下面的命令有效但

import numpy.f2py as myf2py

以下不

import numpy as np
np.f2py #throws no module named f2py

有人可以解释一下吗?

5 个答案:

答案 0 :(得分:19)

numpy 是最高的软件包名称,而import numpy不会导入子模块numpy.f2py

当您执行import numpy时,会创建指向numpy的链接,但numpy未与f2py进一步关联。执行import numpy.f2py

时建立链接

在上面的代码中:

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.f2py
    • numpy numpy.f2py 均可访问
  • import numpy.f2py as myf2py
    • my2py 放入本地符号表(指向numpy.f2py)
    • 其父级numpy未添加到本地符号表中。因此,您无法直接访问numpy

答案 1 :(得分:13)

PEP 221中引入了import as语法,并在那里有详细记录。

通过

导入模块时
import numpy

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

因此,

import numpy as np

相当于,

import numpy
np = numpy
del numpy

在尝试理解这种机制时,值得记住import numpy实际上意味着import numpy as numpy

导入子模块时,必须引用完整的父模块名称,因为导入机制发生的级别高于局部变量范围。即。

import numpy as np
import numpy.f2py   # OK
import np.f2py      # ImportError

我也断言你的断言“在可能的情况下应该[导入numpy as np]”。这是出于历史原因而完成的,主要是因为人们很快就会为每个操作添加numpy前缀。它从来没有阻止我的名字冲突(程序员的懒惰实际上表明与np发生碰撞的概率更高)

最后,为了完善我的曝光,这里有两个你应该注意的import as机制的有趣用法:

1。长子进口

import scipy.ndimage.interpolation as warp
warp.affine_transform(I, ...)

2。兼容的API

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

答案 2 :(得分:2)

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

此功能允许:

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

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

说,当你运行

import numpy as np
np.f2py

您收到AttributeError,因为f2py不是numpy的属性,因为包__init__()的{​​{1}}未在其范围内声明任何内容关于子包numpy

答案 3 :(得分:1)

numpy.f2py实际上是numpy的子模块,因此必须与numpy分开导入。正如aha之前所说:

  

当你导入numpy时,它会创建一个指向numpy的链接,但是   numpy与f2py没有进一步联系。当你建立链接   请导入numpy.f2py

当你致电语句import numpy as np时,你缩短了短语" numpy"到" np"使您的代码更容易阅读。它还有助于避免名称空间问题。 (tkinter和ttk是当你遇到这个问题时会发生什么的一个很好的例子.UI看起来非常不同。)

答案 4 :(得分:0)

这是一个相当古老的帖子,但这是我对其他人提供的解释的2美分。

numpy(参考git repository)包有各种子包,f2py就是其中一个是核心,ma等

如果您在numpy包中引用 init .py,则会导入类似于

的导入
from . import core etc 

但它没有任何导入f2py子包。 这就是

之类的陈述的原因
import numpy as np
np.f2py

赢了,但

import numpy as np
np.core

会奏效。