找不到 numpy.i

Trouble finding numpy.i

我想使用 swig 在 python 中包装一些 c++ 代码,我需要能够使用 numpy.i 将 numpy 数组转换为向量。

这是一个非常令人沮丧的过程,因为我无法在网上找到任何有用的信息来说明我实际上从哪里得到 numpy.i。

这是我目前拥有的 运行ning:

numpy 1.17.3

痛饮 2.0.12

python 3.7.3

Debian 4.9.2

通过阅读 https://docs.scipy.org/doc/numpy/reference/swig.interface-file.html 我得知 numpy.i 应该位于 tools/swig/numpy.i,尽管我的机器上唯一可以找到的地方是 numpy.i在我升级的 python 2.7 文件夹中。我的 python (3.7.3) 工作版本没有这样的文件。

$ locate numpy.i
/usr/lib/python2.7/dist-packages/instant/swig/numpy.i

我试过的:

是否有标准方法来获取正确的 numpy.i 版本?我从哪里下载它,我应该把它放在哪里?

我在下面包含了一些代码作为参考:

test.i:

%module test
%{
    #define SWIG_FILE_WITH_INIT
    #include "test.h"
%}

%include "numpy.i"  //this doesn't seem to do anything
%init %{
import_array();
%}

%apply (int DIM1) {(char x)};  //this doesn't seem to do anything

%include "test.h"

test.h:

#include <iostream>

void char_print(char x);

test.cpp:

#include "test.h"

void char_print(char x) {
  std::cout << x << std::endl;
  return;
}

tester.py:

import test

test.char_print(5)  #nothing is printed, since this isn't converted properly to a char. 

这只是一个简单的例子,但我已经尝试过以多种不同的方式使用 numpy.i(包括复制和粘贴适用于他们的其他人的代码),但它始终不会改变任何东西,无论我是否在我的 test.i 文件中。

Where/how 我得到 numpy.i 吗?

问题:我从python2.7包复制过来的numpy.i文件不兼容,不包含兼容版本当你通过 anaconda 时在安装包中(仍然不确定他们为什么要这样做)。

答案:找到你的numpy版本运行,然后到这里(https://github.com/numpy/numpy/releases)下载numpy-[your_version.zip 文件,然后专门复制 numpy.i 文件,在 numpy-[your_version]/tools/swig/ 中找到。现在将 numpy.i 粘贴到您的项目工作目录中。

您应该从 https://github.com/numpy/numpy/blob/master/tools/swig/numpy.i 下载新的 numpy.i 文件。在这个 numpy.i 文件中没有 PyFile_Check 功能, python3 不支持。如果你还在用 /usr/lib/python2.7/dist-packages/instant/swig/numpy.i,您的代码可能会出现错误undefined symbol: PyFile_Check,因为只有python2可以支持PyFile_Check功能。

对了,出现undefined symbol: PyFile_Check的错误,不一定是SWIG的问题。