我有一個古老而成熟的C++庫,它包含一個Matrix類和一大堆使用它的代碼。它基本上是如何使用SWIG爲Matrix類創建Numpy包裝?
class Matrix {
double* p; // the actual data
int nd; // number of dimensions
int d0, d1, d2; // the actual dimensionality
// ... (a whole lot of functions computing various things, like SVDs, dotproduct etc.
}
現在我們寫一個使用SWIG的python包裝器。我們想在Python一側使用NumPy數組來保持與世界其他地方的兼容。所以我們實際上不需要我們的C++ Matrix類的功能,但是我們想要使用我們庫的其他部分,它需要這個C++矩陣。因此,如果我們可以將NumPy數組的類型圖寫入Matrix類,並在每次調用時透明地轉換NumPy數組並保持內存同步,那麼完美的情況就是如此。比方說,我們有我們的圖書館,這是swigged一些功能:
int some_function(Matrix& in) { /* do some stuff */ }
現在,這將是巨大的,如果在Python,我們可以這樣做:
a = numpy.array[1,2,3,4]
b = some_function(a)
我明白,有numpy.i ,但似乎更多的是關於函數映射和普通的舊C數組。我也明白一個類型映射應該實現我想要的,但我並不真正瞭解如何實際訪問numpy數據。有沒有(相對)簡單的方法來做到這一點?
我也很欣賞一些教程的指針。