On 1/27/2009 1:26 AM, Jochen wrote: > a = fftw3.AlignedArray(1024,complex) > > a = a+1
= used this way is not assignment, it is name binding. It is easy to use function's like fftw_malloc with NumPy: import ctypes import numpy fftw_malloc = ctypes.cdll.fftw.fftw_malloc fftw_malloc.argtypes = [ctypes.c_ulong,] fftw_malloc.restype = ctypes.c_ulong def aligned_array(N, dtype): d = dtype() address = fftw_malloc(N * d.nbytes) # restype = ctypes.c_ulong if (address = 0): raise MemoryError, 'fftw_malloc returned NULL' class Dummy(object): pass d = Dummy() d.__array_interface__ = { 'data' = (address, False), 'typestr' : dtype.str, 'descr' : dtype.descr, 'shape' : shape, 'strides' : strides, 'version' : 3 } return numpy.asarray(d) If you have to check for a particular alignment before calling fftw, that is trivial as well: def is_aligned(array, boundary): address = array.__array_interface__['data'][0] return not(address % boundary) > there a way that I get a different object type? Or even better is there > a way to prevent operations like a=a+1 or make them automatically > in-place operations? a = a + 1 # rebinds the name 'a' to another array a[:] = a + 1 # fills a with the result of a + 1 This has to do with Python syntax, not NumPy per se. You cannot overload the behaviour of Python's name binding operator (=). Sturla Molden _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion