[Numpy-discussion] python user defined type

Nicolas Rougier Nicolas.Rougier at loria.fr
Fri Jul 11 03:24:05 EDT 2008



My Unit class is supposed to represent a neuron that can be linked to
any other unit. The neuron itself is merely a (float) potential that can
vary along time under the influence of other units and learning. I
gather these units into groups which are in fact 2D matrix of units.
Currently, I implemented the Unit and Group and I "talk" with numpy
through an attribute of groups which represent all available potentials.
Finally my group is like a simple 2d matrix of float but I need to have
an underlying object to perform computation on each Unit at each time
step.

Currently I'm able to write something like:

>>> group = Unit()*[2,2]
>>> group.potentials = numpy.zeros([2,2])
>>> print group.potentials
[[ 0.  0.]
 [ 0.  0.]]
>>> group[0,0].potential = 1
[[ 1.  0.]
 [ 0.  0.]]



Nicolas



On Thu, 2008-07-10 at 16:30 -0700, Christopher Barker wrote:
> Nicolas Rougier wrote:
> > Concerning the dtype argument during array creation, I thought it was
> > here for somehow controlling the type of array elements. For example, if
> > I use a "regular" numpy array (let's say a float array), I cannot set an
> > item to a string value (it raises a ValueError: setting an array element
> > with a sequence).
> 
> Yes, but numpy is designed primarily for numeric types: ints, floats, 
> etc. It can also be used for custom types that are essentially like C 
> structs (see recarray). The key is that a dtype desribes a data type in 
> terms of bytes and that they represent -- It can not be a python type.
> 
> The only way to use arbitrary python types is a object array, which 
> you've discovered, but then numpy doesn't know any thing about the 
> objects, other than that they are python objects.
> 
> > So what would be the best way to use numpy arrays with "foreign" types
> > (or is it possible at all) ?  I've designed the "real" Unit in C++ and
> > exported it to python (via boost and shared pointers) and I would like
> > to create array of such Units
> 
> If your type is a C++ class, then it may be possible, with some C 
> hackary to get numpy to understand it, but you're getting beyong my 
> depth here -- also I doubt that you'd get the full features like array 
> math and all anyway -- that's all set up for basic numeric types.
> 
> Maybe others will have some idea, but I think you're pushing what numpy 
> is capable of.
> 
> > (in fact, I also created an array-like
> > class but I would prefer to use directly the real array interface to
> > benefit from the great work of numpy instead of re-inventing the
> > wheel). 
> 
> What operations do you expect to perform with these arrays of Units?
> 
> -Chris
> 




More information about the NumPy-Discussion mailing list