Ç陣列我有一個C函數:
如何抓住在python
void func(int n, int m)
{
int Array[n][m];
make_magic(Array);
}
這使得2D陣列和處理它。我在python3.5使用本功能與ctypes的是這樣的:
from ctypes import *
magic = CDLL('lib_name')
magic.func(n,m)
所以,我怎麼能搶在python這個二維數組?
Ç陣列我有一個C函數:
如何抓住在python
void func(int n, int m)
{
int Array[n][m];
make_magic(Array);
}
這使得2D陣列和處理它。我在python3.5使用本功能與ctypes的是這樣的:
from ctypes import *
magic = CDLL('lib_name')
magic.func(n,m)
所以,我怎麼能搶在python這個二維數組?
您必須處理返回的c數據類型,但在c函數中添加return
語句。然後,您可以:
array = magic.func(n,m)
或者,您可以使用swig在c代碼周圍創建一個python包裝模塊。然後你就可以直接調用python中的任何函數。
C只能返回標量(int,bool,指針等),因此沒有數組。此外,Python默認不支持數組。然而,即使兩者都可行,近存儲器C和解釋的Python的對象結構可能會有很大的不同。 – Chickenmarkus
你想在Python中使用生成的數組,對吧?
採用你的C代碼通過接收到的指針「返回」數組。
void func(int n, int m, int *Array)
{
Array[0][0] = 42; // fill array accordingly
make_magic(Array);
}
通過與NumPy數組初始化,您的函數來創建&對它進行處理,並與NumPy的後處理它:
from ctypes import *
import numpy
n, m = 5, 10
array = numpy.zeros((n,m), dtype=numpy.int)
magic = CDLL('lib_name')
magic.func(n,m, array.ctypes.data)
什麼陣列?該函數不返回任何內容。 – Goyo