python - 如何使用 SWIG 将 Fortran 有序 2d numpy 数组传递到 C++

标签 python c++ arrays numpy swig

我有一个c++的函数

myfun(double* array, int n1, int n2);

我在 python 中与 numpy 交互。在我的接口(interface)文件中,我有

%apply (double* INPLACE_FARRAY2, int DIM1, int DIM2) {(double* inarray, int n1, int n2)}

现在,我想将数组 b = array([[3,27.0],[2,9],[10,1]],order='F') 传递给 myfun在 python 中,但出现以下错误

TypeError: Array must be contiguous.  A non-contiguous array was given. 

我做错了什么?我的%apply语句中的double数据类型不正确吗?

最佳答案

Fortran 顺序 (order='F') 可能是问题所在,因为这与 C 顺序相反,我不确定,因为我无法为 numpy 找到连续与非连续的明确定义。所以可能值得一试:

b = array([[3,27.0],[2,9],[10,1]],order='C')

另外,可能值得一试

myfun( numpy.ascontiguousarray(b) )

我找到了 numpy swig reference doc有助于理解 INPLACE_IN_ 类型映射之间的区别。基本上后者是在 c 函数只读不写时使用的,因为长输入是某种序列,SWIG 代码将能够处理它。前者表示 c 函数将写入数组,因此原始容器中的顺序必须匹配。

关于python - 如何使用 SWIG 将 Fortran 有序 2d numpy 数组传递到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22775154/

相关文章:

c++ - 如何在 MacOS 上安装 Boost?

php - 如何获取对应于两个数组中不同值的键?

arrays - 将多个局部变量分配给 perl 中的数组条目

python - 我可以在 python 中重载 -> 吗?

python - 具有可变数量测试的 PyUnit

c++ - Sublime Text 2 构建系统

c++ - AVL树中的删除

javascript - 如何访问数组中的 javascript 键/值对

python - 按列中的值对数据框进行采样并保留所有行

Python 根据列表中的信息连接数组