使用C-API反转Numpy数组轴

3 投票
1 回答
740 浏览
提问于 2025-04-16 23:11

我正在使用Python的C-API来把一些C++代码封装成一个Python包。最后,我需要在一个numpy数组中反转一个轴,也就是要这样做:

x = x[:, ::-1]

请问有没有什么方法可以通过Numpy的C-API来实现这个功能?我知道有一些函数可以用来转置和交换轴,但我没有找到关于索引的相关资料。有什么想法吗?谢谢,Andy

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

撰写回答