[Tutor] dynamic class method creation?
Lloyd Kvam
pythontutor at venix.com
Tue Nov 11 19:41:42 EST 2003
http://www-106.ibm.com/developerworks/linux/library/l-cpnum.html?ca=dgr-lnxw06NumericalPython
Charming Python: Numerical Python
This article uses a flat attribute to sum the whole array directly.
I think your code would look like:
sum(self.array.flat)
Hope this helps. (I haven't used numeric or numarray myself.)
maddox flower wrote:
> Hi there,
>
> here's my problem:
> I'd like to be able to create a class method dynamically.
> Some background information: I am using the Numeric module which
> provides a nice and fast function called sum() to sum over the elements
> of an array, but only along one axis of the array. Now, I want to sum
> over ALL elements of the array, so I need to apply sum() repeatedly. No
> problem here as long as I know the rank (i.e. the number of axes or
> dimensions) of the array beforehand. Which I do not. Of course I could
> just do the sum recursively, but unfortunately this is quite slow since
> it involves checking conditions at runtime. I need to run this sum
> business like maybe a couple of million times in my program, so slowness
> really is an issue.
>
> Consider the following class. Depending on the rank of the array which
> is used to create a class instance, the sumArray() method should look
> different:
>
> class ArrayContainer:
> def __init(self, array):
> self.array = array
> # create sumArray() method dynamically at this place!
>
> def sumArray(self):
> ## if rank of array = 1, i.e. only one axis (e.g. [1, 2, 3]):
> return sum(self.array)
> ## if rank of array = 2 (e.g. [[1, 2, 3], [4, 5, 6]]):
> return sum(sum(self.array))
> ## if rank of array = n:
> return sum(sum(...sum(self.array)...)) # call sum() n times
>
> Actually checking the rank of the array INSIDE the sumArray() method
> again decreases speed significantly when running through the check some
> million times!
>
> So, how can this dynamic method creation be achieved? Can I use the exec
> statement for this?
>
> Cheers, Maddox
>
>
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
--
Lloyd Kvam
Venix Corp.
1 Court Street, Suite 378
Lebanon, NH 03766-1358
voice: 603-653-8139
fax: 801-459-9582
More information about the Tutor
mailing list