我正在尝试运行一个模拟,其中我执行以下操作:
- 从 0 到 1 之间的均匀分布中抽取 2000 个随机样本
- 计算任何样本与之前选择的样本之间的差异 du
- 使用该差异计算 r=EXP(-a*du)
- 将另一个随机样本 z 与 r 的计算值进行比较
- 创建 r>z 的随机样本列表,并丢弃所有其他样本
- 重复这个过程,直到 2000 个样本被“接受”
这是我到目前为止所拥有的。当我运行此代码时,我收到错误消息“'numpy.float64' object has no attribute 'append'”。有关如何解决此问题的任何想法?
import numpy as np
import matplotlib.pyplot as plt
import math
NP=np.random.uniform(0,1,size=(2000,))
a=np.linspace(0.1,2,num=20)
for i in range(len(a)):
dr = []
du = []
for j in range(1999):
du=N[j+1]-N[j]
r=math.exp(-a[i]*du)
z=np.random.uniform(0,1)
if r>z:
du.append(N[j+1])
dr.append(r)