def gibsSample(pB,pC,pA_B,pD_BC,pE_D,pF_C,label_A,label_B,label_C,label_D,label_E,label_F,T):
#initial state
sample=['A=F','B=n','C=F','D=h','E=F','F=F']
sampleState=[]
for i in range(T):
#draw sample A from p(A | B,C,D,E,F)
sample_A=sampleA(sample,pA_B)
sample[0]=sample_A
#draw sample B from p(B | A,C,D,E,F)
sample_B=sampleB(sample,pB,pA_B,pD_BC)
sample[1]=sample_B
#draw sample C from p(C | A,B,D,E,F)
sample_C=sampleC(sample,pC,pD_BC,pF_C)
sample[2]=sample_C
#draw sample D from p(D | A,B,C,E,F)
sample_D=sampleD(sample,pD_BC,pE_D)
sample[3]=sample_D
#draw sample E from p(E | A,B,C,D,F)
sample_E=sampleE(sample,pE_D)
sample[4]=sample_E
#draw sample F from p(F | A,B,C,D,E)
sample_F=sampleF(sample,pF_C)
sample[5]=sample_F
sampleState.append(sample)
return sampleState
我写了一个示例算法。每次我从一个分布中采样后,变量“sample”中的元素都会被修改,在一个圆之后,我想将它附加到列表“sampleState”中。但是为什么“sampleState”似乎只附加了最初的“sample”,而没有附加我修改的sample呢?我对循环进行了2000次迭代,‘sampleState’中的所有元素都与初始状态相同,但我在每次迭代中都检查了‘sample’,没有问题
每次将
sample
附加到列表中时,都会将引用附加到完全相同的对象在每次循环之后,您都要更改这个对象内部的值(在
sample
列表的每个索引处的值),因此如果列表中的所有对象都指向同一个对象,它们将看到相同的值要解决此问题,请在每个循环的末尾创建一个新列表:
替代解决方案
因为您使用的是固定大小的列表,所以可能还需要使用6元组:
你要找的是函数中的静态变量。正如在this问题中所描述的,您需要在代码的任何地方用
gibsSample.sample
替换sample
:相关问题 更多 >
编程相关推荐