0

我正在尝试在 Python 中模拟伯努利解析过程。我有一个 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

另外,这会产生我想要的吗?

4

1 回答 1

2

energy_trial只是一个值,所以你不能用energy_trial[i]. 看起来那条线应该是:

if r[i] > energy_trial:

至于这是否会产生正确的输出,作为对 Python 和 Matlab 有一点经验的人,我只能说它看起来是正确的。num_photon如果您使用完全可重现的示例(我必须定义类似和energy_sigma我自己来测试您的示例)和一些预期的输出提出一个新问题,您可能可以获得进一步的帮助。

于 2013-08-22T00:42:08.040 回答