python – Swig和多维数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Swig和多维数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2043字,纯文字阅读大概需要3分钟。
内容图文
我正在使用Swig将Cthon与C代码连接起来.
我想调用一个C函数,它接受一个包含int ** var的结构:
typedef struct
{
(...)
int** my2Darray;
} myStruct;
void myCFunction( myStruct struct );
我正在努力研究多维数组.
我的代码看起来像这样:
在接口文件中,我使用这样的carray:
%include carrays.i
%array_class( int, intArray );
%array_class( intArray, intArrayArray );
在python中,我有:
myStruct = myModule.myStruct()
var = myModule.intArrayArray(28)
for j in range(28):
var1 = myModule.intArray(28)
for i in range(28):
var1[i] = (...) filling var1 (...)
var[j] = var1
myStruct.my2Darray = var
myCFonction( myStruct )
我在行myStruct.my2Darray = var上收到错误:
TypeError: in method 'maStruct_monTableau2D_set', argument 2 of type 'int **'
我怀疑行%array_class(intArray,intArrayArray).
我尝试使用typedef for int *来创建我的数组:
%array_class(myTypeDef,intArrayArray);
但它似乎没有用.
你知道如何在Swig中处理多维数组吗?
谢谢你的帮助.
解决方法:
你有没有考虑过使用numpy?我使用了我的SWIG包装的C项目的numpy,用于double和std :: complex元素的1D,2D和3D数组,取得了很大的成功.
您需要get numpy.i并在python环境中安装numpy.
以下是如何构建它的示例:
.i文件:
// Numpy Related Includes:
%{
#define SWIG_FILE_WITH_INIT
%}
// numpy arrays
%include "numpy.i"
%init %{
import_array(); // This is essential. We will get a crash in Python without it.
%}
// These names must exactly match the function declaration.
%apply (int* INPLACE_ARRAY2, int DIM1, int DIM2) {(int* npyArray2D, int npyLength1D, int npyLength2D)}
%include "yourheader.h"
%clear (int* npyArray2D, int npyLength1D, int npyLength2D);
.h文件:
/// Get the data in a 2D Array.
void arrayFunction(int* npyArray2D, int npyLength1D, int npyLength2D);
.cpp文件:
void arrayFunction(int* npyArray2D, int npyLength1D, int npyLength2D)
{
for(int i = 0; i < npyLength1D; ++i)
{
for(int j = 0; j < npyLength2D; ++j)
{
int nIndexJ = i * npyLength2D + j;
// operate on array
npyArray2D[nIndexJ];
}
}
}
.py文件:
def makeArray(rows, cols):
return numpy.array(numpy.zeros(shape=(rows, cols)), dtype=numpy.int)
arr2D = makeArray(28, 28)
myModule.arrayFunction(arr2D)
内容总结
以上是互联网集市为您收集整理的python – Swig和多维数组全部内容,希望文章能够帮你解决python – Swig和多维数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。