numpy array de objetos

Estou tentando implementar uma simulação para um modelo de treliça (treliça boltzmann) em Python. Cada site da rede possui várias propriedades e interage com sites vizinhos de acordo com certas regras. Imaginei que seria inteligente criar uma classe com todas as propriedades e criar uma grade de instâncias dessa classe. (Como não tenho experiência com o Python, isso pode não ser uma boa ideia, fique à vontade para comentar sobre minha abordagem.)

Aqui está um exemplo de brinquedo do que estou fazendo

class site:
    def __init__(self,a,...):
        self.a = a
        .... other properties ...
    def set_a(self, new_a):
        self.a = new_a

Agora eu quero lidar com uma rede 2D / 3D (grade) desses sites, então tentei fazer o seguinte (aqui está uma grade 2D 3x3 como exemplo, mas em simulação eu precisaria da ordem de> 1000x1000X1000)

lattice = np.empty( (3,3), dtype=object)
lattice[:,:] = site(3)

Agora, o problema é que cada ponto da rede se refere à mesma instância, por exemplo

lattice[0,0].set_a(5)

também definirá o valor da treliça [0,2] .a como 5. Esse comportamento é indesejado. Para evitar o problema, posso fazer um loop sobre cada ponto da grade e atribuir os objetos elemento por elemento, como

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

Mas existe uma maneira melhor (sem envolver os loops) de atribuir objetos a uma matriz multidimensional?

obrigado

questionAnswers(3)

yourAnswerToTheQuestion