随机数生成中的Python代码翻译问题或语言差异

随机数生成中的Python代码翻译问题或语言差异,python,simulation,qbasic,Python,Simulation,Qbasic,我是Python新手,没有使用QBasic的经验。我用Python运行了一个模拟,得出了理论上错误的值。然后我用QBasic运行它,得出了理论上的预测值 下面是测试用例。我只计算了概率P(0.9您的Python代码是完全错误的。我认为您希望它执行以下操作: 取两个数组,a和b,每个数组包含由某个随机函数生成的10000个数字。(等效地,每个数组包含来自给定分布数据的10000个样本。) 将这些值配对成10000对,每对取a中的一个元素和b中的一个元素 取每对的总和 数一数这10000对总和中有

我是Python新手,没有使用QBasic的经验。我用Python运行了一个模拟,得出了理论上错误的值。然后我用QBasic运行它,得出了理论上的预测值


下面是测试用例。我只计算了概率P(0.9

您的Python代码是完全错误的。我认为您希望它执行以下操作:

  • 取两个数组,a和b,每个数组包含由某个随机函数生成的10000个数字。(等效地,每个数组包含来自给定分布数据的10000个样本。)
  • 将这些值配对成10000对,每对取a中的一个元素和b中的一个元素
  • 取每对的总和
  • 数一数这10000对总和中有多少在0.9到1.8之间
  • 将上述计数除以10000,得到从这些分布中提取的任何给定数据对总和在0.9到1.8之间的概率,并打印该概率
然而,您的sim卡(a、b)功能正在做一些完全不同的事情。基本上,您实际做的是:

  • 将两个10000元素数组连接起来,形成其元素的20000元素数组
  • 取这个新的20000个元素数组中大于0.9的所有元素之和
  • 把总数除以10000,然后打印出来
此算法与Q-Basic代码中的任何内容都不相似

如果我正确理解了您的问题,我认为您希望sim卡功能如下:

def sim(x_sample, y_sample):

    count = 0
    for i in range(10000):
        if 0.9 <= x_sample[i] + y_sample[i] <= 1.8:
            count += 1

    probability = count/10000.0

    print("P(a < x <= b) : {0:8.4f}".format(probability))
def sim卡(x_样本,y_样本):
计数=0
对于范围(10000)内的i:

如果0.9您的Python代码完全错误。我认为您希望它执行以下操作:

  • 取两个数组,a和b,每个数组包含由某个随机函数生成的10000个数字。(等效地,每个数组包含来自给定分布数据的10000个样本。)
  • 将这些值配对成10000对,每对取a中的一个元素和b中的一个元素
  • 取每对的总和
  • 数一数这10000对总和中有多少在0.9到1.8之间
  • 将上述计数除以10000,得到从这些分布中提取的任何给定数据对总和在0.9到1.8之间的概率,并打印该概率
然而,您的sim卡(a、b)功能正在做一些完全不同的事情。基本上,您实际做的是:

  • 将两个10000元素数组连接起来,形成其元素的20000元素数组
  • 取这个新的20000个元素数组中大于0.9的所有元素之和
  • 把总数除以10000,然后打印出来
此算法与Q-Basic代码中的任何内容都不相似

如果我正确理解了您的问题,我认为您希望sim卡功能如下:

def sim(x_sample, y_sample):

    count = 0
    for i in range(10000):
        if 0.9 <= x_sample[i] + y_sample[i] <= 1.8:
            count += 1

    probability = count/10000.0

    print("P(a < x <= b) : {0:8.4f}".format(probability))
def sim卡(x_样本,y_样本):
计数=0
对于范围(10000)内的i:

如果0.9,请不要一问两个问题。如果你对Python有具体问题,请问Python问题。如果你对QBasic有具体问题,请问QBasic问题。你用什么值调用sim(a,b)
?你的代码从来不会这样。请不要一问两个问题。如果你对Python有具体问题,请问Python问题。如果你对QBasic有具体问题,请问QBasic问题。你用什么值调用
sim(a,b)
?你的代码永远不会。谢谢!!很好的解释。如果可以的话,我会竖起两个大拇指。buggered或其他任何轻描淡写的说法。第四个例子是这样的:print“case 4:”sim([0.25 if random()<0.8 else 1.5表示范围内的r(10000)],[0.25 if random()<0.8 else 1.5表示范围内的r(10000)])所以我对0.9,1.8进行排序,然后进行求和。它应该是一个求和()然后再对0.9,1.8进行排序。谢谢你!!很好的解释。如果可以的话,我会竖起两个大拇指。buggered或者其他什么都是轻描淡写的。第四个案例看起来像这样:打印“案例4:[0.25 if random()<0.8 else 1.5 for r in random(10000)],[0.25 if random()<0.8或者1.5表示范围(10000)]内的r,所以我对0.9,1.8进行排序,然后求和。它应该是一个sum(),然后对0.9,1.8进行排序。
RANDOMIZE
FOR i = 1 TO 10000
    X1 = RND(1)
    X2 = RND(1)
    Y = X1+X2
    IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i

PRINT C/10000
RANDOMIZE
FOR i = 1 TO 10000
    X1 = (-0.5)*(LOG(1-RND(1)))
    X2 = (-0.5)*(LOG(1-RND(1)))
    Y = X1+X2
    IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i

PRINT C/10000
RANDOMIZE
FOR i = 1 TO 10000
    X1 = RND(1)
    X2 = RND(1)*2
    Y = X1+X2
    IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i

PRINT C/10000
RANDOMIZE
FOR i = 1 TO 10000
    X14 = RND(1)
    X24 = RND(1)
    IF (X14<0.8) THEN X41=0.25 ELSE X41=1.5
    IF (X24<0.8) THEN X42=0.25 ELSE X42=1.5
    Y = X1+X2
    IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i

PRINT C/10000
case 1: P(a < x <= b) :  0.5715 
case 2: P(a < x <= b) :  0.3371 
case 3: P(a < x <= b) :  0.4413 
case 4: P(a < x <= b) :  0.3213 
def sim(x_sample, y_sample):

    count = 0
    for i in range(10000):
        if 0.9 <= x_sample[i] + y_sample[i] <= 1.8:
            count += 1

    probability = count/10000.0

    print("P(a < x <= b) : {0:8.4f}".format(probability))
>>> from random import random
>>> 
>>> sim([random() for i in range(10000)],
...     [random() for i in range(10000)])
P(a < x <= b) :   0.5746
>>>      
... from math import log
>>> 
>>> sim([-0.5*log(1-random()) for i in range(10000)],
...     [-0.5*log(1-random()) for i in range(10000)])
P(a < x <= b) :   0.3405
>>>     
... sim([random() for i in range(10000)],
...     [2*random() for i in range(10000)])
P(a < x <= b) :   0.4479