[Tutor] Dictionaries or Numpy?

2008-05-16 Thread Adam Clarridge
Hi, I'm writing an AI for a board game called Blokus, and I believe
that the quality of the program is going to greatly depend on the
efficiency of the algorithm I use to generate legal moves and rate
them.

I know sort of how I'm going to do this legal move generation, and I
know it is going to require lots of accesses to an array of some kind
which will represent the game board.

I'm fairly new to Python, and I am not sure whether it would be faster
for me to use a Dictionary data type to represent the board
(advantages: indices can be strings or tuples, and the dictionary can
store different types of data as well, so programming would be easier)
or the Numpy array type (don't know much about this, but I have heard
Numpy is faster).

So is Numpy faster for simple array accesses? That would be valuable
and I'd deal with having an integer-indexed integer array if I had to.

Code might look something like this:

for playable_corner in all_playable_corners:
for piece in all_available_pieces:
for each_square in piece:
# if square is not in a legal position, don't add to list
of legal moves

So that if statement would be accessing the board array many many
times. I guess my question is: Is there any way to test Dictionary
access time vs. Numpy array access time?

Thanks,

Adam
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Dictionaries or Numpy?

2008-05-17 Thread Adam Clarridge
On 5/16/08, John Fouhy <[EMAIL PROTECTED]> wrote:
>
> On 17/05/2008, Adam Clarridge <[EMAIL PROTECTED]> wrote:
> >  I'm fairly new to Python, and I am not sure whether it would be faster
> >  for me to use a Dictionary data type to represent the board
> >  (advantages: indices can be strings or tuples, and the dictionary can
> >  store different types of data as well, so programming would be easier)
> >  or the Numpy array type (don't know much about this, but I have heard
> >  Numpy is faster).
>
>
> Hi Adam,
>
> I believe a general rule of programming is: don't optimize until you
> know you need to.  I would advise using dictionaries for simplicity.
> If the program turns out slower than you would like, you can use
> profiling tools to figure out where in the code it is spending most of
> its time.  If this turns out to involve dictionary lookups, you could
> then look at changing to Numpy (hint: you could use the timeit module
> to benchmark dictionary access against Numpy arrays).  If your program
> design is good, the change should be too hard.
>
>
> http://en.wikipedia.org/wiki/Optimization_(computer_science)#When_to_optimize
>
> --
>
> John.



Thanks for the insight - I guess I was sort of overlooking that general
principle, good to be reminded. The timeit module seems like exactly what I
would want later on, too. Thanks again!

Adam
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor