假设我们有一个C函数,它接受一组一个或多个输入数组,处理它们,并将其输出写入一组输出数组.签名如下(count表示要处理的数组元素的数量):
void compute (int count, float** input, float** output)
Run Code Online (Sandbox Code Playgroud)
我想通过ctypes从Python调用此函数,并使用它将转换应用于一组NumPy数组.对于定义为的单输入/单输出功能
void compute (int count, float* input, float* output)
Run Code Online (Sandbox Code Playgroud)
以下作品:
import ctypes
import numpy
from numpy.ctypeslib import ndpointer
lib = ctypes.cdll.LoadLibrary('./block.so')
fun = lib.compute
fun.restype = None
fun.argtypes = [ctypes.c_int,
ndpointer(ctypes.c_float),
ndpointer(ctypes.c_float)]
data = numpy.ones(1000).astype(numpy.float32)
output = numpy.zeros(1000).astype(numpy.float32)
fun(1000, data, output)
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何为多个输入(和/或输出)创建相应的指针数组.有任何想法吗?
编辑:所以人们一直想知道如何compute知道有多少数组指针(count指每个数组的元素数).事实上,这是硬编码的; 给定的compute确切知道预期的输入和输出数量.调用者的工作是验证input并output指向正确数量的输入和输出.这是一个compute采用2个输入并写入1个输出数组的示例:
virtual void compute (int count, float** input, float** output) { …Run Code Online (Sandbox Code Playgroud)