Ç阵列我有一个C函数:
如何抓住在python
void func(int n, int m)
{
int Array[n][m];
make_magic(Array);
}
这使得2D阵列和处理它。我在python3.5使用本功能与ctypes的是这样的:
from ctypes import *
magic = CDLL('lib_name')
magic.func(n,m)
所以,我怎么能抢在python这个二维数组?
Ç阵列我有一个C函数:
如何抓住在python
void func(int n, int m)
{
int Array[n][m];
make_magic(Array);
}
这使得2D阵列和处理它。我在python3.5使用本功能与ctypes的是这样的:
from ctypes import *
magic = CDLL('lib_name')
magic.func(n,m)
所以,我怎么能抢在python这个二维数组?
您必须处理返回的c数据类型,但在c函数中添加return
语句。然后,您可以:
array = magic.func(n,m)
或者,您可以使用swig在c代码周围创建一个python包装模块。然后你就可以直接调用python中的任何函数。
C只能返回标量(int,bool,指针等),因此没有数组。此外,Python默认不支持数组。然而,即使两者都可行,近存储器C和解释的Python的对象结构可能会有很大的不同。 – Chickenmarkus
你想在Python中使用生成的数组,对吧?
采用你的C代码通过接收到的指针“返回”数组。
void func(int n, int m, int *Array)
{
Array[0][0] = 42; // fill array accordingly
make_magic(Array);
}
通过与NumPy数组初始化,您的函数来创建&对它进行处理,并与NumPy的后处理它:
from ctypes import *
import numpy
n, m = 5, 10
array = numpy.zeros((n,m), dtype=numpy.int)
magic = CDLL('lib_name')
magic.func(n,m, array.ctypes.data)
什么阵列?该函数不返回任何内容。 – Goyo