dtype sa zaviedlo teraz v poslednej verzii NumPy - 0.9.4 na sprehladnenie castovania poli. http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103

je to nasledovnik scipy_core - teda ani nie tak nasledovnik ako premenovane scipy_core

btw cez vikend by mala vyjst bugfixova verzia

balky

David Necas (Yeti) wrote:

On Fri, Feb 03, 2006 at 01:38:09PM +0100, balky wrote:
no globals[A] nemozem pouzit pretoze....

Asi musim viac osvetlit na com robim.

Robim Celularny Automat. Je to vlastne pole buniek. Kazda bunka ma nejaky stav, ktory sa meni v kazdej iteracii na zaklade prechodovej funkcie. No a prechodova funkcia meni stav bunky na zaklade okolia bunky podla danych pravidiel CA. Okolie je bud

Mooreove okolie
xxx
xbx
xxx

alebo von Neumanove okolie
x
xbx
x

Problém jako stvořený pro C, jak datovým modelem, tak
potřebou rychlosti jednoduchých operací... No nic.

Toto vsak nie je podstatne. Podstatne je to, ze kvoli zrychleniu vypoctov, kazda bunka je trieda, ktora vie svoj stav a obsahuje referencie na svoje okolie. T.j. ma ako clensku premennu pole, v ktorom su referencie na susedov bunky. Cize

vesmir = numpy.empty((x,y),dtype=object)
for x in xrange(x):
for y in xrange(y):
bunka = vesmir[x][y] bunka.okolie = numpy.empty((3,3),dtype=object)
  bunka.okolie[1][1] = vesmir[x-1][y-1]
  bunka.okolie[1][2] = vesmir[x][y-1]
  bunka.okolie[1][3] = vesmir[x+1][y-1]
  bunka.okolie[2][1] = vesmir[x-1][y]
 atd....

Samozrejme, ze u seba to mam napisane inak - toto je nazorne pre pochopenie.

Ako spravim to, ze ked zmenim napr. vesmir[5][5], aby sa mi zmeny reflektovali aj do okoli vsetkych buniek, ktore maju bunku vesmir[5][5] ako svoje okolie

Dufam, ze som to vysvetlil jasne. Ak nie pytajte sa upresnim.

Problém je, že s pythonovskými poli to samozřejmě funguje:

   class Cell:
       pass

   x = 5
   y = 5
   universe = [[Cell() for j in range(x)] for i in range(y)]
   for ii, row in enumerate(universe):
       for jj, cell in enumerate(row):
           cell.neighbourhood = (universe[ii][(jj + 1) % x],
                                 universe[ii][(jj + x-1) % x],
                                 universe[(ii + 1) % y][jj],
                                 universe[(ii + y-1) % y][jj])

   print hasattr(universe[2][3], 'foo')
   cell = universe[2][2]
   cell.neighbourhood[0].foo = 'bar'
   print universe[2][3].foo

Nemám žádnou verzi numpy, která by znala dtype=object,
(používám numarray) a nebudu si kupovat(!) dokumentaci
numpy, takže co vlastně dělá s objekty, bude nejlepší se
zeptat autora...

Klíčová otázka je, zda

   id(bunka.okolie[1][1]) == id(vesmir[x-1][y-1])

Pokud ano, tak se při zjišťování, zda se změnil, díváš na
špatný objekt, protože jeden objekt se nemůže zároveň změnit
i nezměnit. Pokud ne, tak je otázka, jak k tomu dochází.

Yeti


--
That's enough.
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python


_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem