使用 C API 的 Numpy 多切片?
Numpy multi-slice using C API?
我知道如何使用 C API 从 Numpy 数组中获取切片:
// 'arr' is a 2D Python array, already created
PyObject pyArray = PyArray_FromAny(arr, PyArray_DescrFromType(NPY_FLOAT), 0, 0, NPY_ARRAY_DEFAULT, null);
PyObject slice = PySlice_New(PyLong_FromLong(0), PyLong_FromLong(2), null);
PyObject result = PyObject_GetItem(pyArray, slice);
这基本上匹配以下 Python 表达式:
arr[0:2]
现在,如何从 'arr' 中获取 "multi" 切片?例如,如何以编程方式编写以下表达式?
arr[0:2,0:3]
为了获得多维切片,您必须将切片插入元组中,调用该元组上的 get 项。类似于:
PyObject* pyArray = PyArray_FromAny(arr, PyArray_DescrFromType(NPY_FLOAT), 0, 0, NPY_ARRAY_DEFAULT, null);
PyObject* slice_0 = PySlice_New(PyLong_FromLong(0), PyLong_FromLong(2), null);
PyObject* slice_1 = PySlice_New(PyLong_FromLong(0), PyLong_FromLong(3), null);
PyObject* slices = PyTuple_Pack(2, slice_0, slice_1);
PyObject* result = PyObject_GetItem(pyArray, slices);
其背后的基本原理是__getitem__(self, arg)
(只有一个参数)因此多个索引在元组中隐式转换:arg = (slice(0,2), slice(0,3),)
我知道如何使用 C API 从 Numpy 数组中获取切片:
// 'arr' is a 2D Python array, already created
PyObject pyArray = PyArray_FromAny(arr, PyArray_DescrFromType(NPY_FLOAT), 0, 0, NPY_ARRAY_DEFAULT, null);
PyObject slice = PySlice_New(PyLong_FromLong(0), PyLong_FromLong(2), null);
PyObject result = PyObject_GetItem(pyArray, slice);
这基本上匹配以下 Python 表达式:
arr[0:2]
现在,如何从 'arr' 中获取 "multi" 切片?例如,如何以编程方式编写以下表达式?
arr[0:2,0:3]
为了获得多维切片,您必须将切片插入元组中,调用该元组上的 get 项。类似于:
PyObject* pyArray = PyArray_FromAny(arr, PyArray_DescrFromType(NPY_FLOAT), 0, 0, NPY_ARRAY_DEFAULT, null);
PyObject* slice_0 = PySlice_New(PyLong_FromLong(0), PyLong_FromLong(2), null);
PyObject* slice_1 = PySlice_New(PyLong_FromLong(0), PyLong_FromLong(3), null);
PyObject* slices = PyTuple_Pack(2, slice_0, slice_1);
PyObject* result = PyObject_GetItem(pyArray, slices);
其背后的基本原理是__getitem__(self, arg)
(只有一个参数)因此多个索引在元组中隐式转换:arg = (slice(0,2), slice(0,3),)