我正在使用 Python C-API 将一些 C++ 代码包装为 Python 包。最后,我必须在一个 numpy 数组中反转一个轴,即做
x = x[:, ::-1]
有没有办法使用 Numpy C-API 做到这一点?我知道有转置和交换轴的例程,但我没有找到很多关于索引的信息。有任何想法吗?谢谢,安迪
我正在使用 Python C-API 将一些 C++ 代码包装为 Python 包。最后,我必须在一个 numpy 数组中反转一个轴,即做
x = x[:, ::-1]
有没有办法使用 Numpy C-API 做到这一点?我知道有转置和交换轴的例程,但我没有找到很多关于索引的信息。有任何想法吗?谢谢,安迪
由于 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,我建议您首先阅读如何使用 C API,因为如果您只习惯于常规 Python,这可能会有点令人困惑。例如,必须显式减少使用Py_DECREF()
orPy_XDECREF()
宏在代码中创建的任何引用的引用计数。http://docs.python.org/c-api/refcounting.html