Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Custom data type in a matrix.

Reply
Thread Tools

Custom data type in a matrix.

 
 
Gaz
Guest
Posts: n/a
 
      04-23-2006
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...

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

Im doing a simple hex based game and i need a way to store every hex
property (color, owner,x, y, etc) in a matrix's "cell", representing
each cell a hex.

Thank you.

 
Reply With Quote
 
 
 
 
Gaz
Guest
Posts: n/a
 
      04-23-2006
BTW, i tried the "classe Thinge(): pass" but does not qualify as "data
type" for a numpy array.

 
Reply With Quote
 
 
 
 
Robert Kern
Guest
Posts: n/a
 
      04-23-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/...mpy-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


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
http://www.velocityreviews.com/forums/(E-Mail Removed)

"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

 
Reply With Quote
 
Diez B. Roggisch
Guest
Posts: n/a
 
      04-23-2006
Gaz schrieb:
> 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...
>
> 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
>
> Im doing a simple hex based game and i need a way to store every hex
> property (color, owner,x, y, etc) in a matrix's "cell", representing
> each cell a hex.


You don't want numpy - you want ordinary lists in lists. Consider this:

class Hex(object):
def __init__(self, x, y):
self.x, self.y = x, y
self.terrain_type = "unknown"


map = [[Hex(x, y) for y in xrange(height)] for x in xrange(width)]


There is no advantage of using numpy whatsoever - your fields aren't
subject to mathematical operations or other transformations/selections.

Diez
 
Reply With Quote
 
Gaz
Guest
Posts: n/a
 
      04-23-2006
And how im supposed to assign data to a specific hex?

 
Reply With Quote
 
Diez B. Roggisch
Guest
Posts: n/a
 
      04-23-2006
Gaz schrieb:
> And how im supposed to assign data to a specific hex?


How would you have done it using numarray? Accessing a specific field is
done using slicing:

fields[x][y].property = value

Diez
 
Reply With Quote
 
Diez B. Roggisch
Guest
Posts: n/a
 
      04-23-2006
Diez B. Roggisch schrieb:
> Gaz schrieb:
>> And how im supposed to assign data to a specific hex?

>
> How would you have done it using numarray? Accessing a specific field is
> done using slicing:


The term slicing is of course wrong here - it's called array index access.

Diez
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
custom allocation and custom type castironpi Python 0 08-04-2008 07:15 PM
Re: Type casting- a larger type to a smaller type pete C Programming 4 04-02-2004 05:19 PM
Re: Type casting- a larger type to a smaller type heyo C Programming 3 04-01-2004 06:35 PM
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. luna ASP .Net 1 02-13-2004 01:15 PM
Question: Invoking custom file type (file associated with custom app) VB Programmer ASP .Net 1 11-03-2003 11:49 PM



Advertisments