массив объектов

Я пытаюсь реализовать симуляцию для модели решетки (решетки Boltzmann) на Python. Каждый узел решетки имеет ряд свойств и взаимодействует с соседними узлами по определенным правилам. Я подумал, что было бы разумно создать класс со всеми свойствами и создать сетку экземпляров этого класса. (Поскольку у меня нет опыта работы с Python, это может быть совсем не хорошей идеей, поэтому не стесняйтесь комментировать мой подход.)

Вот игрушечный пример того, что я ' m do

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. Такое поведение нежелательно. Чтобы избежать этой проблемы, я могу перебирать каждую точку сетки и назначать объекты элемент за элементом, например

for i in range(3):
    for j in range(3):
        lattice[i,j] = site(a)

. Но есть ли лучший способ (без использования циклов) назначить объекты в многомерный массив?

Спасибо

23
задан jonalm 2 February 2011 в 17:22
поделиться