簡體   English   中英

如何使用Python訪問屬於對象的動態C ++數組變量?

[英]How to access dynamic C++ array variable, belonging to an object, with Python?

我有一個帶有動態數組變量的C ++類。 這非常簡單,目前僅用於測試目的:

class testClass {

public:
    int *x;

    testClass();
    ~testClass();
};

當前通過構造函數,使用一些值來初始化變量x 我正在嘗試通過Cython為C ++類編寫一個可以訪問x的python包裝器代碼。 我怎樣才能做到這一點?

最好的辦法是能夠訪問變量而不復制大量數據,因為x可能很大。 我可以以numpy數組形式訪問它嗎?

例如,它表現為numpy數組,例如只能讀取? 我希望能夠在python的其他計算中使用x中的數據,因此首選numpy數組。

我想我可以創建一個GET方法來初始化一個numpy數組,將其傳遞給GET方法,並用循環將x的數據填充到其中,但這會復制數據,而且看起來不是很優雅。 希望有更好的解決方案。

我嘗試過使用靜態數組,並找到了一種行之有效的解決方案。 如果x是靜態的,則可以在.pyx文件中執行以下操作:

cdef extern from "testClass.h":
    cdef cppclass testClass:
        testClass()
        int x[5]

cdef class pyTestClass:
    cdef testClass *thisptr

    def __cinit__(self):
        self.thisptr = new testClass()
    def __dealloc__(self):
        del self.thisptr

    property x:
        def __get__(self):
            return self.thisptr.x

如果我在Python中訪問x ,我將獲得一個Python列表,並返回值。


如何使用Python訪問屬於對象的動態C ++數組變量?

看一下這個示例該示例說明了如何將在C中分配的數組公開給numpy而沒有數據副本。 例如,在Cython中使用已分配的數據創建一個一維numpy整數數組的相關行是,

ndarray = np.PyArray_SimpleNewFromData(1, shape, np.NPY_INT, data_pointer) 

請參閱相應的Numpy文檔

暫無
暫無

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

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