[Pyrex] Re: Pyrex and Numarray
Nitin Madnani
nmadnani at wam.umd.edu
Tue Sep 20 15:52:35 CEST 2005
Hmm ... this looks good. A couple of questions:
1) numarray is slower than Numeric for arrays smaller than, say,
20,000 elements right?
2) Is this filling-in using the C functions going to be faster than
using the Pythonic way to create a numeric array
and then filling it in, as Greg and the others suggested earlier?
Thanks !
Nitin
On Sep 20, 2005, at 5:34 AM, John Carter wrote:
> I've never had any problems doing this.
>
> I have declared a _numarray object which
>
>
> cdef extern from "numarray/arraybase.h":
> cdef enum NumarrayType:
> tAny, tBool, tInt8, tUInt8, tInt16, tUInt16, tInt32,
> tUInt32, tInt64, tUInt64, tFloat32, tFloat64, tComplex32, tComplex64
>
> cdef extern from "numarray/arrayobject.h":
> struct PyArray_Descr:
> int type_num
> int elsize
> char type
>
> cdef extern from "numarray/arrayobject.h":
> ctypedef class numarray._numarray._numarray [object
> PyArrayObject]:
> cdef char *data
> cdef int nd
> cdef int *dimensions
> cdef int *strides
> cdef object base
> cdef PyArray_Descr *descr
>
> cdef extern from "numarray/arrayobject.h":
> cdef object PyArray_FromDimsAndData(int nd, int *dims, int
> type, char *data)
> cdef object PyArray_FromDims(int nd, int *dims, int type)
> cdef object PyArray_Return(object)
>
>
> I can use with
>
> cdef extern from "numarray/libnumarray.h":
> # The numarray initialization funtion
> void import_libnumeric()
>
> # The Numeric API requires this function to be called before
> # using any Numeric facilities in an extension module.
> import_libnumeric()
>
>
>
> cdef _numarray out
>
> then I use the nunarray api to fill it.
>
> out = PyArray_FromDims(left.nd, left.dimensions, tUInt8)
>
> then I can use the constructs
>
> out.nd, out.dimensions, out.strides, out.data
>
> to access the internals.
>
> this is great but what I really want to do is, given a,b,c,d,e as
> numarray's I want to write
>
> a = (c+b)*(d-e)
>
> and have pyrex generate efficient C code that dosnt create
> intermediate arrays.
>
> I'm sure I can do this if a .. e are PyObjects by going back to
> the python level. But that seems to defeat the idea of numerical
> efficiency.
>
> I ran an undergraduate project about 3 years ago (pyrex was about
> 0.4) which did this but it wasn't really useable,as he totally
> hijacked the [] notation and lists and stuff stopped working.
>
> I'm considering having another go (or rather getting an
> undergraduate), but I cant decide on the approach:
> Use a preprocessor to generate pyrex,
> Hack pyrex internals
> or wait till pyrex does objects and hope that the object
> implementation will be sufficiently flexible to let me do what I want.
>
> I'm currently leaning on the first option, even if it means parsing
> the pyrex file twice.
>
> John
>
>
>
>
>
> Dr. John N. Carter jnc at ecs.soton.ac.uk
> ISIS http://www.ecs.soton.ac.uk/~jnc/
>
> _______________________________________________
> Pyrex mailing list
> Pyrex at lists.copyleft.no
> http://lists.copyleft.no/mailman/listinfo/pyrex
>
More information about the Pyrex
mailing list