python输入input数组_python – 将一组NumPy数组传入C函数进行输入和输出

假设我们有一个C函数,它需要一个或多个输入数组,处理它们,并将其输出写入一组输出数组.签名如下(计数表示要处理的数组元素的数量):

void compute (int count, float** input, float** output)

我想通过ctypes从Python中调用此函数,并使用它将变换应用于一组NumPy数组.对于单输入/单输出函数定义为

void compute (int count, float* input, float* output)

以下作品:

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)

但是,我不知道如何为多个输入(和/或输出)创建相应的指针数组.有任何想法吗?

编辑:所以人们一直在想知道计算如何知道要预期的数组指针数(计数是指每个数组的元素数).事实上,这是硬编码的;给定的计算精确地知道有多少输入和输出.呼叫者的工作是验证输入和输出指向正确数量的输入和输出.这是一个计算采用2个输入并写入1个输出数组的示例:

virtual void compute (int count, float** input, float** output) {

float* input0 = input[0];

float* input1 = input[1];

float* output0 = output[0];

for (int i=0; i

float fTemp0 = (float)input1[i];

fRec0[0] = ((0.09090909090909091f * fTemp0) + (0.9090909090909091f * fRec0[1]));

float fTemp1 = (float)input0[i];

fRec1[0] = ((0.09090909090909091f * fTemp1) + (0.9090909090909091f * fRec1[1]));

output0[i] = (float)((fTemp0 * fRec1[0]) - (fTemp1 * fRec0[0]));

// post processing

fRec1[1] = fRec1[0];

fRec0[1] = fRec0[0];

}

}

我没有办法影响计算的签名和实现.我可以验证(从Python!)需要多少输入和输出.关键问题是如何为函数提供正确的参数,以及如何在NumPy(NumPy数组的指针数组)中生成适当的数据结构.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值