[Tutor] Creating a subclass of NumArray

ligon@are.berkeley.edu ligon at are.berkeley.edu
Thu Aug 18 00:44:00 CEST 2005

I'd like to be able to instantiate and work with objects
which possess the properties of matrices, but which also
carry some additional information.  

Numarray provides a NumArray object which can be treated as 
a matrix.  One way to instantiate these objects is by a call 
to a function array, like

>>> from numarray import *
>>> x=array([[1,2],[3,4]])
>>> print x
[[1 2]
 [3 4]]
>>> print x.__class__
<class 'numarray.numarraycore.NumArray'>

What I'd like to do is create a subclass of
NumArray; something like:

>>> class MyArray(numarraycore.NumArray):
...   def __init__(self,x):
...     numarraycore.NumArray.__init__(self,x)
...     self.myfield={}

However, the function array which I used above to instantiate
an NumArray object isn't at all the same as
numarraycore.NumArray.__init__().  The latter takes a much
more complicated set of arguments, so that:

>>> y=MyArray(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 3, in __init__
ValueError: invalid shape tuple

I'd *like* to use the simpler instantiation provided by array();
something like:

>>> class MyArray(numarraycore.NumArray):
...   def __init__(self,x):
...     self=array(x)
...     self.myfield={}

But this doesn't work:

>>> y=MyArray(x)
>>> print y
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.3/site-packages/numarray/numarraycore.py", line 711, in __str__
    return array_str(self)
  File "/usr/lib/python2.3/site-packages/numarray/numarraycore.py", line 1357, in array_str
    return arrayprint.array2string(
  File "/usr/lib/python2.3/site-packages/numarray/arrayprint.py", line 178, in array2string
    x = a[()]
libnumarray.error: can't get buffer size

Presumably y hasn't really properly inherited all the attributes of a
NumArray.  What's the right way to solve this problem?  For bonus
points, is it possible to solve it without delving too deeply into
the guts of numarray?


Ethan Ligon, Assoc. Professor                           ligon at are.berkeley.edu
Dept. of Agricultural & Resource Economics
University of California                        http://are.berkeley.edu/~ligon
Berkeley, CA 94720-3310                                          (510)643-5411

More information about the Tutor mailing list