簡體   English   中英

Python NumPy數組可增強::: multi_array numpy_boost設置以在C ++和NumPy之間建立接口

[英]Python NumPy arrays to boost::multi_array numpy_boost setup to interface between C++ and NumPy

我有一個C / C ++ DLL,其中包含需要從NumPy調用的庫,其中DLL內的格式均為boost :: multi_array格式。 雖然我看到了一些與此項目有關的帖子: https : //github.com/mdboom/numpy-boost,但實際上很少有用戶提供的文檔和示例,這些示例和示例涉及將boost :: multi_array與NumPy接口包裝在一起所需的步驟。這個圖書館。 我的問題是:盡管這些示例足以猜測接口的C ++部分(除了字符串,這是如何處理的?Q1),但是在Python端您必須做什么才能使用編譯的DLL(Q2)? 看來Ctypes不起作用(如果我錯了,請糾正我),所以是否必須在Cython中重寫它?

作為參考,這是C部分,其中包含我要包裝的所有數據類型:

extern "C"
{
    DECLDIR void Cfunction(
        boost::multi_array<double, 2>& p_result,
        const vector<string>&          p_calcType,
        const string&                  p_optionType,
        unsigned long                  p_nTimeStep = 50,
        const vector<double>&          p_premium = vector<double>());  

使用ctypes可以動態加載DLL並從中調用函數。 從我的角度來看,這是在Python代碼中使用已編譯代碼的最簡單方法。 方法如下: 如何使用Python中的DLL文件?

numpy允許您獲取指向內存位置的指針。 看一下: http : //docs.scipy.org/doc/numpy-1.10.1/reference/genic/numpy.ndarray.ctypes.html

如果您沒有DLL的源代碼並且無法更改其接口,則可以創建C ++包裝器(您自己的單獨的DLL),該包裝器接受來自Python的原始指針而不是boost::multi_array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM