[SciPy-user] Re: weave and access to Numeric arrays

Fernando Perez fperez at pizero.colorado.edu
Mon Jul 22 21:55:15 CDT 2002

Final followup. Here's a modified version of your code with some extra 
comments which may be useful for others in this situation. Now I see how nice 
some of the type handling magic that weave does is!

#!/usr/bin/env python
import Numeric as N
from scipy import weave

def sumC(x):
    """Return the sum of the elements of a 1-d array.
    An example of how weave accesses a Numeric array without blitz.  """

    num_types = {N.Float:'double',
    x_type = num_types[x.typecode()]
    code = """
           double result=0.0;
           double element;

           for (int i = 0; i < _Nx[0]; i++){

               // Note the type of the pointer below is computed in python
               //element = *(%s *)(x->data+i*x->strides[0]);

               // Weave's magic does the above for us:
               element = x_data[i];
               result += element;
               cout << "Element " << i << " = " << element << "\n";
           cout << "size x " << _Nx[0] << "\n";    

           return_val = Py::new_reference_to(Py::Float(result));
           """ % x_type;

    return weave.inline(code,['x'],verbose=0)

x = N.ones(5,typecode=N.Float32)
y = N.array([4.3,1.5,5.6],typecode=N.Float)
z = N.array([4.3,1.5,5.6],typecode=N.Float32)

print x
print sumC(x)
print y
print sumC(y)
print z
print sumC(z)


I've posted an updated version of my weave examples with this at:



One is color highlighted, the other pure text for python use.

Again, thanks a lot Eric.



More information about the SciPy-user mailing list