[Cython] c-array of numpy ndarrays?
Brian Blais
bblais at gmail.com
Fri May 8 17:26:31 CEST 2009
On May 8, 2009, at 10:27 , Dag Sverre Seljebotn wrote:
> Brian Blais wrote:
>> Hello,
>>
>> In my question for optimization of my routines, I am trying to pre-
>> fill
>> a static c-array from a list of numpy ndarrays. Previously, I did
>> something like:
>>
>> cdef double *w[30]
>> cdef int r[30],c[30]
>>
>> and then I'd run through my list, and get the shape info and the data
>> pointer, and fill in these arrays. This works, but then I have to do
>> all my 2D -> 1D indexing, like:
>>
>> w[k][i+c[k]*j]
>>
>> which is ugly, and prone to typos. I'd like to do:
>
> So the underlying problem here is that each array has a (widely
> different) size?
the underlying problem is that the difference between the following
two pieces is about a factor of 20:
# using a list of objects, getting an array (called weights) from
each one
# and doing some calculations
cdef np.ndarray[DTYPE_t,ndim=2] weights
for c in self.connections_to:
num_incell=c.incell.N
num_outcell=c.outcell.N
weights=c.weights
for __i in range(num_outcell):
for __j in range(num_incell):
a+=weights[__i,__j]
and
# using an array of structures, prefilled from a list of objects,
# getting an pointer to the data (called weights) from each one
# and doing some calculations
cdef double *weights
for cg from 0<=cg<number_of_connections_to:
num_incell=s.c_num_incell[cg]
num_outcell=s.c_num_outcell[cg]
weights=s.c_weights[cg]
for ni from 0<=ni<num_incell:
for no from 0<=no<num_outcell:
a+=weights[no+ni*num_outcell]
#===========
I think this is because of the python calls in the former, and the
number of times I call this little snippet. I am going to try to see
if it is the running through the list, or the obtaining the
attributes, which is the problem.
bb
>
> You can always wrap the solution above into e.g. a cdef class, so that
> you can write
>
> yourspecialarrayobject.get(k, i, j)
that's a nice idea... thanks.
bb
--
Brian Blais
bblais at gmail.com
http://web.bryant.edu/~bblais
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codespeak.net/pipermail/cython-dev/attachments/20090508/0077772d/attachment.htm
More information about the Cython-dev
mailing list