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