2011-08-09 35 views
3

我正在使用Python C-API將一些C++代碼封裝爲Python包。 最後,我必須扭轉在numpy的陣列的軸線,即做使用C-API在Numpy數組中反向軸

X = X [:, :: - 1]

是否有這樣做使用numpy的C-API的某種方式? 我知道有用於轉置和交換軸的例程,但我沒有找到太多有關索引的內容。 任何想法? 謝謝, 安迪

+0

你可以調用數組的'reverse()'方法嗎? – agf

+0

Numpy數組沒有反向方法,對吧?反向僅適用於列表afaik - 哦,顯然在python數組上。但這些只是扁平的對象,而不是像numpy數組那樣的數組。 –

+0

創建一個'slice'對象怎麼樣? – agf

回答

3

由於索引在Python只是語法糖調用對象的__getitem__()方法(即x[:, ::-1]相當於x.__getitem__((slice(None), slice(None, None, -1)))),你只需要構造所需切片對象,他們在正確的順序存儲在元組,然後調用該元組作爲參數的對象的__getitem__()方法。

你會想看看下面的鏈接:

http://docs.python.org/c-api/slice.html#PySlice_New
http://docs.python.org/c-api/tuple.html#PyTuple_Pack
http://docs.python.org/c-api/object.html#PyObject_GetItem

我建議上,如果你的避風港如何使用C API的首位讀了但是,因爲如果你只習慣於常規的Python,它可能會引起混淆。例如,必須使用Py_DECREF()Py_XDECREF()宏明確減少在代碼中創建的任何引用的引用計數。 http://docs.python.org/c-api/refcounting.html