【问题标题】:Simulating Random Matlab Process in Python Issue在 Python 问题中模拟随机 Matlab 过程
【发布时间】:2013-08-22 00:37:31
【问题描述】:

我正在尝试在 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

另外,这是否会产生我想要的效果?

【问题讨论】:

  • 以后,请显示完整的回溯,而不仅仅是错误字符串的一部分。发布完整的 SSCCE 而不仅仅是不可运行的代码片段也有很大帮助。

标签: python arrays matlab random rows


【解决方案1】:

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

if r[i] > energy_trial:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多