Custom data type in a matrix.

Robert Kern robert.kern at gmail.com
Sat Apr 22 23:47:26 EDT 2006


Gaz wrote:
> Hi guys. I've been lookig for this in the numpy pdf manual, in this
> group and on google, but i could not get an answer...

You will probably want to look or ask on the numpy list, too.

  https://lists.sourceforge.net/lists/listinfo/numpy-discussion

> Is there a way to create a custom data type (eg: Name: string(30), Age:
> int(2), married: boolean, etc) and then use that custom data in a
> matrix? Actually, this is a two question question :P

Yes. Use record arrays. They are discussed in section 8.5 of the _The Guide to
NumPy_ if you have the book. There is another example of using record arrays on
the SciPy wiki (although it is less focused on combining different data types
than it is named column access):

  http://www.scipy.org/RecordArrays

Here is an example:

In [18]: from numpy import *

In [19]: rec.fromrecords([['Robert', 25, False], ['Thomas', 53, True]],
names='name,age,married', formats=['S30', int, bool])
Out[19]:
recarray([('Robert', 25, False), ('Thomas', 53, True)],
      dtype=[('name', '|S30'), ('age', '>i4'), ('married', '|b1')])

In [21]: Out[19].name
Out[21]:
chararray([Robert, Thomas],
      dtype='|S30')

In [22]: Out[19].age
Out[22]: array([25, 53])

In [23]: Out[19].married
Out[23]: array([False, True], dtype=bool)

You can also use object arrays if you need to implement classes and not just
dumb, basic types:

In [33]: class Hex(dict):
   ....:     def __init__(self, **kwds):
   ....:         dict.__init__(self, **kwds)
   ....:         self.__dict__ = self
   ....:
   ....:

In [34]: field = array([Hex(color=(0,0,0), owner='Player1', x=10, y=20,
etc='Black hex owned by Player1'),
   ....:                Hex(color=(1,1,1), owner='Player2', x=10, y=21,
etc='White hex owned by Player2')], dtype=object)

In [35]:

In [35]: field
Out[35]: array([{'y': 20, 'etc': 'Black hex owned by Player1', 'color': (0, 0,
0), 'owner': 'Player1', 'x': 10}, {'y': 21, 'etc': 'White hex owned by Player2',
'color': (1, 1, 1), 'owner': 'Player2', 'x': 10}], dtype=object)

-- 
Robert Kern
robert.kern at gmail.com

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco




More information about the Python-list mailing list