使用C-API在Numpy数组中翻转轴

3

我正在使用Python C-API将一些C++代码封装为Python包。 最后,我需要反转numpy数组中的一个轴,即执行

x = x[:, ::-1]

是否有使用Numpy C-API来实现这个功能的方法? 我知道有用于转置和交换轴的例程,但我没有发现有关索引的内容。 有什么建议吗? 谢谢, 安迪


你能直接调用数组的 reverse() 方法吗? - agf
NumPy数组没有reverse方法,对吧?据我所知,reverse只适用于列表 - 还有似乎适用于Python数组。但是这些仅是平面对象,不像NumPy数组那样是nd-arrays。 - Andreas Mueller
创建一个 slice 对象怎么样? - agf
那可能会奏效。但我还没有找到使用C-API实现的方法。你有文档链接吗? - Andreas Mueller
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接