[Numpy-discussion] C-api to slicing?
Neal Becker
ndbecker2@gmail....
Fri Feb 8 06:39:41 CST 2008
Robert Kern wrote:
> Neal Becker wrote:
>> Is there a C-api to array slicing?
>
> PyObject_GetItem(), PySlice_New(), and friends, for the most part.
>
I tried PySequence_GetItem on my array, and it seems the refcount isn't
working.
inline object test_slice3 (object const& in_obj, int r) {
if (!PyArray_Check (in_obj.ptr())) {
throw std::runtime_error ("test_slice3: input must be numpy::array");
}
PyArrayObject* ao = (PyArrayObject*)(in_obj.ptr());
PyArrayObject* ro = (PyArrayObject*) PySequence_GetItem ((PyObject*)ao,
r);
return object (handle<PyArrayObject> (ro));
}
In the above, object is a boost::python::object, which is just a wrapper
around a PyArrayObject*. I extract the PyArrayObject*.
Now test:
b = array ((2,3))
print sys.getrefcount (b)
c = test_slice3(a,0)
print sys.getrefcount (b), sys.getrefcount(c)
This prints:
2
2 2
Here's what it should do:
print sys.getrefcount (b)
c = b[0]
print sys.getrefcount (b), sys.getrefcount(c)
2
3 2
More information about the Numpy-discussion
mailing list