使用C-API反转Numpy数组轴
我正在使用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