用Python仿真Matlab随机过程

2024-06-16 11:04:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python模拟Bernoulli解析过程。我有一个Matlab的例子。不管用什么术语,我根据一些随机变量生成一个0和1的列向量。你知道吗

num_trials = 1
b_energy_res = zeros(num_photon,num_trials);
for idx = 1:num_trials
    energy_trial = randn(1,1)*energy_sigma+3*energy_sigma;
    b_energy_res(:,idx) = rand(num_photons,1)>energy_trial;
end;

t = t+(1-b_energy_res)*1e9;
t = t/1e-12;

它将输出一些0和1的向量

我试着用Python做同样的事情,但是我得到了错误。另外,我正在尝试使numpy中的数组具有大约相同的频率值1和0。我可以做一个直方图来检查它们。我得到属性错误:

b_energy_res = np.zeros(num_photon)    
energy_trial = np.random.standard_normal() * energy_sigma + 3 * energy_sigma
r = np.random.uniform(0.0,1.0,num_photon)

for i in xrange(int(num_photon)):
    if r[i] > energy_trial[i]:
        b_energy_res[i] = 1

t = t + (1-b_energy_res)*1e9
t = t*1e12

错误是: “float”没有属性getitem

还有,这是我想要的吗?你知道吗


Tags: for属性错误npzerosresrandom向量
1条回答
网友
1楼 · 发布于 2024-06-16 11:04:48

energy_trial只是一个值,因此不能使用energy_trial[i]对其进行索引。看起来这条线应该是:

if r[i] > energy_trial:

至于这是否产生了正确的输出,作为一个有点Python和Matlab经验的人,我只能说它看起来是正确的。如果你用一个完全可重复的例子(我必须定义像num_photonenergy_sigma这样的东西来测试你的例子)问一个新问题,并且有一些预期的结果,你可能会得到进一步的帮助。你知道吗

相关问题 更多 >