

X.flat returns an indexable 1-D iterator (mostly similar to an array 
but always 1-d) --- only has .copy and .__array__  attributes of an array!!!

.typecode()  -->  .dtype.char

.iscontiguous() --> .flags['CONTIGUOUS'] or .flags.contiguous

.byteswapped() -> .byteswap()

.itemsize() -> .itemsize

.toscalar() -> .item()

If you used typecode characters:

'c' -> 'S1' or 'c'
'b' -> 'B'
'1' -> 'b'
's' -> 'h'
'w' -> 'H'
'u' -> 'I'


C -level

some API calls that used to take PyObject * now take PyArrayObject * 
(this should only cause warnings during compile and not actual problems). 
  PyArray_Take 

These commands now return a buffer that must be freed once it is used
using PyMemData_FREE(ptr);

a->descr->zero       -->   PyArray_Zero(a)
a->descr->one        -->   PyArray_One(a)

Numeric/arrayobject.h  -->  numpy/oldnumeric.h


# These will actually work and are defines for PyArray_BYTE, 
#   but you really should change it in your code
PyArray_CHAR         -->  PyArray_CHAR  
   (or PyArray_STRING which is more flexible)  
PyArray_SBYTE        -->  PyArray_BYTE

Any uses of character codes will need adjusting....
use PyArray_XXXLTR  where XXX is the name of the type.


If you used function pointers directly (why did you do that?),
the arguments have changed.  Everything that was an int is now an intp.  
Also, arrayobjects should be passed in at the end. 

a->descr->cast[i](fromdata, fromstep, todata, tostep, n)
a->descr->cast[i](fromdata, todata, n, PyArrayObject *in, PyArrayObject *out)
   anything but single-stepping is not supported by this function
   use the PyArray_CastXXXX functions.

