Я пытаюсь реализовать симуляцию для решетчатой модели (решетка болтцмана) в Python. Каждый сайт решетки обладает рядом свойств и взаимодействует с соседними сайтами в соответствии с определенными правилами. Я подумал, что было бы разумно сделать класс со всеми свойствами и создать сетку экземпляров этого класса. (Поскольку я неопытен с Python, это может быть не очень хорошая идея, поэтому не стесняйтесь комментировать мой подход.)
Вот пример игрушки, что я делаю
class site:
def __init__(self,a,...):
self.a = a
.... other properties ...
def set_a(self, new_a):
self.a = new_a
Теперь я хочу иметь дело с 2D/3D решеткой (сеткой) таких сайтов, поэтому я попытался сделать следующее (здесь в качестве примера используется сетка 2D 3x3, но в моделировании мне понадобится порядок > 1000x1000X1000)
lattice = np.empty( (3,3), dtype=object)
lattice[:,:] = site(3)
Теперь проблема состоит в том, что каждая точка решетки относится к одному и тому же экземпляру, например
lattice[0,0].set_a(5)
также задает значение решетки [0,2].a - 5. Это поведение нежелательно. Чтобы избежать проблемы, я могу перебрать каждую точку сетки и назначить элемент element за элементом, например
for i in range(3):
for j in range(3):
lattice[i,j] = site(a)
Но есть ли лучший способ (не связанный с циклами) назначать объекты многомерному массиву?
Спасибо