如何从 python 中的循环创建可变矩阵列表?

How to create a list of mutable matrices from a cycle in python?

我的目标是做一个动态模拟。为此,我创建了一个二维矩阵列表。每个矩阵应该一次更改一个条目("time" 瞬间是列表的每个步骤,它是可迭代的)。

我使用这种格式是因为我想在 Mathematica 中使用这个矩阵列表(我用 Python 创建),以使用 "Manipulate" 函数可视化动力学。

n=3 
M=[[0,0,0][0,1,0][0,0,0]]    # initial matrix M (a simple example)
l=[M]
numbersteps=10
for step in range(1,numbersteps+1):    

    for v1 in range(1,n**2+1):   
        for v2 in range(1,n**2+1):


            i=VertexIndex (M,v1)[0]    # i,j, ki, kj are indexes,
            j=VertexIndex (M,v1)[1]    # which I calculate in the function VertexIndex
            ki=VertexIndex (M,v2)[0]   # VertexIndex returns (int1,int2)
            kj=VertexIndex (M,v2)[1]


            if M[i-1][j-1]==1:  
                M[i-1][j-1]=-1
                M[ki-1][kj-1]=1     # changes the entry M(ki, kj)




    l.append(M)     # list of each matrix M, for each step 

我期待得到

l=[M(step1),M(step2),M(step3),...]`

因为 M 正在更改其条目,所以当我 运行 不同 M 的序列时,我会看到动态。 但是我得到的只是最终矩阵M的列表,"numbersteps"次,即

l=[M(finalstep),M(finalstep),M(finalstep),...], such that len(l)=numbersteps.

这有意义吗?我的错误在哪里?感谢您的帮助。

对象 M 在其初始化期间仅创建一次,因此每次使用 l.append(M)M 附加到 l 时,您将附加对每次迭代都是同一个对象,因此随着对象的变化,对该对象的所有引用的值也会发生变化。

您可以附加列表列表的深层副本(先添加 from copy import deepcopy):

l.append(deepcopy(M))