On Nov 26, 2008, at 10:24 AM, Gabriel Gellner wrote:

> On Tue, Nov 25, 2008 at 12:06:06PM -0800, Robert Bradshaw wrote:
>> One way to do it would be to flatten/compact the ndarray early on (so
>> one know the entries are contiguous) and then pass the raw float* and
>> its length (keeping the original array around so you don't have to
>> worry about memory issues.
>>
> Yeah I do this with my own code at times, but I am generally  
> dealing with a
> matlab audience, and this seems like dark magic. I don't need  
> maximum speed,
> just as fast as is still understandable to basic programmers.

Certainly a worthy goal. One of the main motivations of Cython is to  
achieve maximum speed without sacrificing understandability. There  
is, of course, a lot that remains to be done in this direction :).

When you're speaking of callbacks, would it be to magic to pass (C)  
function pointers around?

>
>> Note that __call__, though not as slow as a normal python function
>> call, still has Python semantics (i.e. all of its arguments and its
>> return value have to pass through Python objects) so just using a
>> cdef method could speed things up considerably. (I wonder how hard it
>> would be to support cpdef __call__?) The call to empty is probably
>> dominating things too--since the 3 seems hard coded in anyways, I
>> would accept (and return) a
>>
> How hard do you think it would be to write something that sets up  
> an empty (or
> zeroed) ndarray do avoid the python call? Upon further thinking I  
> imagine
> this is the major issue from f2py.
>
> If it is doable for mortals I would try my hand at it. I imagine it  
> is just
> getting the .data and some metadata of the struct setup correctly,  
> but I don't
> fully understand the magic of the ndarray in cython.

I bet there's probably a C-level function in NumPy that one could  
just call, if one can find it. Either that or malloc/calloc a chunk  
and use NumPy's C API to create a new ndarray out of that raw data.

> If this is possible would it make sense to add it to the numpy.pyx  
> file?

Yes, certainly. This is (part of) what Dag was talking about being  
able to put inline functions in .pxd files.

>
>> cdef struct data:
>>      float x
>>      float y
>>      float z
>>
>> instead of a 3-element ndarray.
>>
> I don't have control of the calling program routine, so this won't  
> work . . .

Sure.

> Again, thanks for all the responses, I continue to think Cython is  
> pythons
> greatest `killer` feature for science.

Thanks. 
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to