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

在C中嵌入Python:传递二维数组并检索回列表,python,c,arrays,python-c-api,python-embedding,Python,C,Arrays,Python C Api,Python Embedding,我想将数组列表(或2D数组)如[[1,2,3],[4,5,6]]从C传递到Python脚本,该脚本计算并返回一个列表。为了实现这一点,需要对嵌入进行哪些可能的更改?要执行的python脚本如下所示: abc.py 这里的大小是WSS中1D数组的数量(例如,在WSS=[[1,2,3],[4,5,6]]的情况下为2)。问题不同于建议的重复,因为它必须将列表作为一维数组返回给C。我认为您要做的是传入一些列表,在返回Python之前,先将它们转换为C数组,然后再返回列表 列表在C中作为指向PyObjec

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

abc.py


这里的大小是WSS中1D数组的数量(例如,在
WSS=[[1,2,3],[4,5,6]]
的情况下为2)。问题不同于建议的重复,因为它必须将列表作为一维数组返回给C。

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

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


要将数组返回python,您必须查看python-CAPI,它提供了用C创建和操作python对象的方法。正如othera所建议的,使用也是一个具有许多优点的选项。在这种情况下,您可以使用PyArray\u SimpleNew创建一个数组并用您的输出填充它。

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

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


要将数组返回python,您必须查看python-CAPI,它提供了用C创建和操作python对象的方法。正如othera所建议的,使用也是一个具有许多优点的选项。在这种情况下,您可以使用PyArray\u SimpleNew创建一个数组并用您的输出填充它。

您所说的“数组列表”是什么意思?你不能把C数组放在Python列表中,我认为二维数组(用C表示)(就像Python中的列表一样)更合适。你可以参考我给出的我想要的输入的例子。可能的重复我知道这不是一个完美的重复-他们使用
std::vector
而不是2D C数组,他们返回元组而不是列表-但是非常接近,答案很好,所以你应该能够从中得到你想要的。谢谢,是的,它帮助我解决了查询的第一部分,但是如何将列表返回给C?你说的“数组列表”是什么意思?你不能把C数组放在Python列表中,我认为二维数组(用C表示)(就像Python中的列表一样)更合适。你可以参考我给出的我想要的输入的例子。可能的重复我知道这不是一个完美的重复-他们使用
std::vector
而不是2D C数组,他们返回元组而不是列表-但是非常接近,答案很好,所以你应该能够从中得到你想要的。谢谢,是的,它帮助我解决了查询的第一部分,但如何将列表返回给C?
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