I actually got it to work-- the function prototype in the pxi file was wrong, needed to be:
int PyArray_SETITEM(object obj, void* itemptr, object item) This still doesn't explain why the buffer interface was slow. The general problem here is an indexed array (by dates or strings, for example), that you want to conform to a new index. The arrays most of the time contain floats but occasionally PyObjects. For some reason the access and assignment is slow (this function can be faster by a factor of 50 with C API macros, so clearly something is awry)-- let me know if you see anything obviously wrong with this def reindexObject(ndarray[object, ndim=1] index, ndarray[object, ndim=1] arr, dict idxMap): ''' Using the provided new index, a given array, and a mapping of index-value correpondences in the value array, return a new ndarray conforming to the new index. ''' cdef object idx, value cdef int length = index.shape[0] cdef ndarray[object, ndim = 1] result = np.empty(length, dtype=object) cdef int i = 0 for i from 0 <= i < length: idx = index[i] if not PyDict_Contains(idxMap, idx): result[i] = None continue value = arr[idxMap[idx]] result[i] = value return result On Wed, Feb 11, 2009 at 3:25 PM, Dag Sverre Seljebotn < da...@student.matnat.uio.no> wrote: > Wes McKinney wrote: > > I am writing some Cython code and have noted that the buffer interface > > offers very little speedup for PyObject arrays. In trying to rewrite the > > same code using the C API in Cython, I find I can't get PyArray_SETITEM > to > > work, in a call like: > > > > PyArray_SETITEM(result, <void *> iterresult.dataptr, obj) > > > > where result is an ndarray of dtype object, and obj is a PyObject*. > > Interesting. Whatever you end up doing, I'll make sure to integrate > whatever works faster into Cython. > > I do doubt your results a bit though -- the buffer interface in Cython > increfs/decrefs the objects, but otherwise it should be completely raw > access, so using SETITEM shouldn't be faster except one INCREF/DECREF per > object (i.e. still way faster than using Python). > > Could you perhaps post your Cython code? > > Dag Sverre > > _______________________________________________ > Numpy-discussion mailing list > Numpy-discussion@scipy.org > http://projects.scipy.org/mailman/listinfo/numpy-discussion >
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion