小编apl*_*apl的帖子

将一组NumPy数组传递给C函数以进行输入和输出

假设我们有一个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确切知道预期的输入和输出数量.调用者的工作是验证inputoutput指向正确数量的输入和输出.这是一个compute采用2个输入并写入1个输出数组的示例:

virtual void compute (int count, float** input, float** output) { …
Run Code Online (Sandbox Code Playgroud)

c python ctypes numpy ffi

12
推荐指数
1
解决办法
4540
查看次数

标签 统计

c ×1

ctypes ×1

ffi ×1

numpy ×1

python ×1