【问题标题】:Numpy array stuck in while loop if I enter a number greater than 0.1如果我输入大于 0.1 的数字,numpy 数组会卡在 while 循环中
【发布时间】:2022-08-03 01:07:37
【问题描述】:

我想做的是:

生成 6 个随机数乘以一个系数,然后在它们之间相加给我一个介于全面的- 0.5 和全面的+ 0.5。该程序在 Gk_coeff(Gk_coeff[5] 的第六个数字)的最后一个位置的系数 <= 0.1 的情况下运行良好,但是如果我输入 0.11、0.12(如给出的代码)等等,它将停止工作.一定是有原因的,但我实在想不出来。我试过在linux和windows上使用它,问题仍然存在,所以它与系统无关。

#!/usr/bin/env python3
import random
import numpy

overall = 83

Gk_coeff = [ 0.23, 0.23, 0.23, 0.23, 0.07, 0.12 ]
Gk_values = numpy.empty(6, dtype=int)

calculated_overall = 0

while not (overall - 0.5 <= calculated_overall <= overall + 0.5) :
    calculated_overall = 0
    for i in range (len(Gk_coeff)):
        Gk_values[i] = random.randint(overall - 7, overall + 7)
        calculated_overall += (Gk_values[i] * Gk_coeff[i])

print(calculated_overall)
  • overall - 0.5 &lt;= calculated_overall 被评估为 overall - (0.5 &lt;= calculated_overall)
  • 您还(重新)将calculated_overall 设置为零,每次迭代
  • 你的 GK_coef 加起来不等于一。它们加起来是 1.1。因此,平均而言,您应该期望 computed_overall 总体徘徊在 1.1 * 左右。整体越大,就越难达到这一点。
  • [对不起,我发表了评论,然后意识到我误读了您的代码。你评论了我删除的评论,所以也许也删除它,所以线程有效。]
  • 对不起,如果这被掩埋了。你的 Gk_coeff 加起来不等于 1。这就是问题所在。

标签: python numpy random


【解决方案1】:

while 循环没有退出。原因是您迭代生成的随机数calculated_overall 在预期中(并且很有可能大于overall + 0.5。特别是,原因是

ExpectedValue[calculated_overall] = sum(Gk_coeff) * ExpectedValue[andom.randint(overall - 7, overall + 7)]
                                  = 1.11 * 83
                                  = 92.13

反过来,while 循环的条件始终成立,因为 calculated_overall 实际上永远不会落在区间 [82.5, 83.5] 内。

对权重进行归一化以便它们正确地求和到1.0 解决了这个问题,即

Gk_coeff = [val/sum(Gk_coeff) for val in Gk_coeff]

提供一个随机数calculated_overall,其期望值为83,并且很有可能在退出while循环的[82.5, 83.5]区间内。

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2016-11-19
    • 2021-09-28
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多