Cython:cimport和import numpy作为(两者)np

46

在Cython文档的教程中,有numpy模块的cimport和import语句:

import numpy as np
cimport numpy as np

我发现这种约定在numpy/cython用户中非常流行。

这对我来说看起来很奇怪,因为它们被命名为np。 在代码的哪个部分,导入/ cimport的np被使用? 为什么cython编译器不会混淆它们?


2
因为cimport并不真正导入一个(Python)模块。它导入了(C)定义。我不知道,但我可以想象,如果你把第二行改成只有cimport numpy,事情可能会出错:它很可能需要实际在脚本中使用的Python模块名称与定义命名空间之间的对应关系。 - user707650
1
@Evert,你也可以使用cimport numpy,就像使用import numpy一样,它的工作方式完全相同,但是cimport可以访问导入模块下的C函数或属性,而import则是Python函数或属性。 - Saullo G. P. Castro
1个回答

51

cimport my_module可以访问my_module下的C函数、属性,甚至子模块。

import my_module可以访问my_module下的Python函数、属性和子模块。

在您的情况下:

cimport numpy as np

让你可以访问Numpy C API,从而可以声明数组缓冲区、变量类型等等...

还有:

import numpy as np

为您提供NumPy-Python函数的访问,如np.arraynp.linspace等。

Cython在内部处理此歧义,使用户无需使用不同的名称。


2
作为一个小补充:正如 @Saullo Castro 所提示的那样,Numpy C API 并没有提供 Python Numpy 提供的所有函数。要了解 C API 能做什么和不能做什么,您可以查看 Cython 安装中的 Includes 文件夹。在那里,您将找到 Cython 导入的 .pxd 文件。 - m00am
1
Numpy C-API - gies0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接