2016-08-24 39 views
1

我想從C傳遞一個數組(或二維數組)的列表,例如[[1,2,3],[4,5,6]],它將計算並返回一個列表。嵌入code需要什麼樣的修改才能實現?要執行的Python腳本如下:將Python嵌入到C中:傳遞一個二維數組並返回一個列表

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 

這裏大小1D陣列中WSS數(例如,2箇中的情況下wss=[[1,2,3],[4,5,6]])的問題是比不同建議重複的意義上,它必須將列表作爲一維數組返回給C.

+0

你是什麼意思的「列表陣列」?您不能將C數組放入Python列表中。 – user2357112

+0

我認爲一個二維數組(以C語言來說)(它將像Python中的列表列表)更合適。你可以參考我給出的我想要的輸入的例子。 – suzaku

+0

[如何將二維數組從C傳遞到Python]可能的副本(http://stackoverflow.com/questions/30330279/how-to-pass-two-dimensional-array-from-c-to-python) – DavidW

回答

0

我想你要做的是傳遞一些列表,讓它們轉換爲C數組,然後返回列表在返回到Python之前。

這些列表在C中作爲指向PyObject的指針接收,因此要從中獲取數據必須使用PyArg_ParseXX(YY),其中XX和YY取決於您在Python中具有哪種類型的列表對象,以及您希望如何在C中解釋它。這是您要指定輸入列表的形狀信息並將其轉換爲處理所需的任何形狀的位置。

要將數組返回給python,您必須查看Python-C API,該API提供了在C中創建和操作Python對象的方法。如其他人所示,使用numpy-C API也是一個選項,優點。在這種情況下,您可以使用PyArray_SimpleNew來創建一個數組並將其填充到輸出中。

相關問題