在C中嵌入Python:传递二维数组并检索列表

时间:2016-08-24 21:21:51

标签: python c arrays python-c-api python-embedding

我想将C中的[[1,2,3],[4,5,6]]数组(或2D数组)列表传递给计算并返回列表的Python脚本。为了实现这一点,嵌入code需要进行哪些可能的更改?要执行的python脚本如下:

abc.py

import math
def xyz(size,wss):
    result=[0 for i in range(size)]
    for i in range(size):    
        wss_mag=math.sqrt(wss[i][0]*wss[i][0]+wss[i][1]*wss[i][1]+wss[i][2]*wss[i][2])
        result[i]=1/wss_mag
    return result

此处size是WSS中1D数组的数量(例如wss=[[1,2,3],[4,5,6]]中的2个数组)问题与建议的副本不同,它必须将列表作为1-D数组返回到下进行。

1 个答案:

答案 0 :(得分:0)

我认为您要做的是传入一些列表,将它们转换为C数组,然后返回到Lists,然后再返回Python。

列表在C中作为指向PyObject的指针接收,因此要从中获取数据,必须使用PyArg_ParseXX(YY),其中XX和YY取决于您拥有的列表对象的类型在Python中以及如何在C中解释它。您可以在此处指定输入列表的形状信息并将其转换为处理所需的任何形状。

要将数组返回到python,你必须查看Python-C API,它提供了在C中创建和操作Python对象的方法。正如其他人所建议的,使用numpy-C API也是一个选项有很多优点。在这种情况下,您可以使用PyArray_SimpleNew创建一个数组并用输出填充它。