我正在尝试用Python实现一个晶格模型(晶格boltzmann)的模拟。该网格的每个站点都具有多个属性,并根据一定的规则与相邻站点交互。我认为创建一个具有所有属性的类并创建该类的实例网格可能更聪明。(由于我没有使用Python的经验,这可能根本不是一个好主意,所以请随时对我的方法发表评论。)
这是我正在做的一个玩具示例
class site:
def __init__(self,a,...):
self.a = a
.... other properties ...
def set_a(self, new_a):
self.a = new_a
现在我想要处理这样的站点的2D/3D网格(网格),所以我尝试执行以下操作(这里是2D3x3网格作为示例,但在模拟中,我需要>1000x1000X1000的顺序)
lattice = np.empty( (3,3), dtype=object)
lattice[:,:] = site(3)
现在,问题是每个格点引用相同的实例,例如
lattice[0,0].set_a(5)
还会将lattice0,2.a的值设置为5。这是不需要的行为。为了避免这个问题,我可以遍历每个网格点并逐个元素地分配对象,如下所示
for i in range(3):
for j in range(3):
lattice[i,j] = site(a)
但是,有没有更好的方法(不涉及循环)将对象分配给多维数组?
谢谢
https://stackoverflow.com/questions/4877624
复制相似问题