Python中生成100个正态分布随机数

4

我是Python的极度新手,很难写出一个非常简单的代码。

我尝试着用gauss函数,期望值为1.0,标准差为0.005,生成100个正态分布的数字,并将它们存储在一个数组中,以便可以计算这些样本的平均值和标准偏差。

以下是我的代码:

def uniformrandom(n):   
    i=0  
    while i< n:  
        gauss(1.0, 0.005)  
        i = i + 1
    return i

我尝试了一下。
L = uniformrandom(100)

在Python中,代码应该缩进,但是当我在StackOverflow输入时,我并不知道如何缩进。

假设我使用公式(x1+x2+...+xn)/100来获得平均值,那么我该如何存储这些数字并使用该公式来计算平均值。

我在Python中尝试了这段代码,但L只打印出n的值。我不太清楚我的代码有什么问题,应该如何解决。

如果有人能提供一些帮助,将不胜感激。非常感谢!


1
你的代码没有正确缩进。 - Chuck
uniformrandom函数没有返回任何值,因此在您的代码中L为空(仅包含None值)。 - Ludwik Trammer
你刚才撤销了Zondo的编辑,而他修正了你的缩进 - 当你和别人同时编辑时要小心! - Useless
是的,这是我的错误 @Useless - user71346
你增加 i 直到它等于 n,然后返回它。 - Peter Wood
6个回答

7

3

uniformrandom()没有返回任何结果。您需要添加一个return语句:

def uniformrandom(n):
    i=0
    while i< n:
        gauss(1.0, 0.005)
        i = i + 1
    return i

这只返回了gauss数字。你甚至没有将gauss()调用存储在列表中。您应该将您的函数更改为以下内容:

def uniformrandom(n):
    gausses = []
    for _ in range(n):
        gausses.append(gauss(1.0, 0.005))
    return gausses

你甚至可以使用列表推导式:

def uniformrandom(n):
    return [gauss(1.0, 0.005) for _ in range(n)]

1

在Python中,代码应该有缩进,但是当我在StackOverflow输入时,我不知道如何缩进。

你只需要使用空格进行缩进。

我在Python中尝试了这段代码,但L没有打印任何东西。

嗯,你的函数没有返回任何值。 编辑现在你的代码返回一个整数i,它将与n相同。它仍然没有返回与你调用的gauss函数相关的任何内容。

例如,要生成单个合适的数字:

def uniformrandom_1():
    return gauss(1.0, 0.005)

现在,如果你想要一个包含n个数字的列表,你可以直接使用。
[uniformrandom_1() for i in range(n)]

或者将其编写为一个函数:
def uniformrandom(n):
    return [uniformrandom_1() for i in range(n)]

如何存储这些数字并使用公式计算平均值。
好的,现在我们可以将您的平均公式翻译成
def mean(sample):
    return sum(sample)/len(sample)

L = uniformrandom(100)
LMean = mean(L)

0
尝试以下代码:
def uniformrandom(n):  
   nums=[]
   total=0
   i=0  
   for i in range(1, n):
     num=gauss(1.0, 0.005)
     nums.append( num  ) 
     total +=num
  return (nums,total/n)

返回生成的数字和平均值


0

这将使用高斯函数创建一个包含n个随机数的列表。 import random as rd

def uniformrandom(n):  
    i=0
    random_list=[]*n
    for i in range(n):  
        random_list+=[rd.gauss(1, 0.005)]
    return random_list

要获取平均值,只需使用mean=sum(random_list)/n


0
为了在Python中使用期望值为1.0,标准差为0.005的高斯函数生成100个正态分布的随机数,可以使用numpy.random.normal函数,如下所示。
import numpy as np

random_numbers = np.random.normal(1.0, 0.005, 100)

为了将random_numbers存储在数组中,可以使用numpy.array来实现,具体如下:
random_numbers_array = np.array(random_numbers)

然后使用{{link1:numpy.mean}}来计算平均值。

mean = np.mean(random_numbers_array)

而要计算标准差,则使用以下方式numpy.std

std = np.std(random_numbers_array)

一个函数,它以随机数生成器的平均值和标准差作为输入,并执行 OP 希望实现的功能,可能是这样的:
def uniformrandom(mean, std):
    random_numbers = np.random.normal(mean, std, 100)
    random_numbers_array = np.array(random_numbers)
    mean = np.mean(random_numbers_array)
    std = np.std(random_numbers_array)
    return random_numbers_array, mean, std

让我们看看它检索到了什么

print(uniformrandom(1.0, 0.005))

[Out]:
(array([1.00716042, 0.99938042, 0.99178698, 1.00791888, 1.00623344,
       1.00555578, 0.99890757, 1.00695046, 0.98482516, 0.9928371 ,
       1.00016377, 0.99510195, 1.00280951, 0.99472607, 0.99453582,
       1.00791222, 1.00302319, 1.00004503, 0.99884054, 1.00429994,
       0.99591756, 1.010769  , 1.00827643, 0.996754  , 0.99236853,
       1.00096622, 1.00092158, 1.00192217, 1.00148108, 0.9975529 ,
       1.00953799, 1.0073464 , 0.99942883, 1.0065139 , 1.00265884,
       1.00885268, 0.99613224, 1.00299541, 0.99977556, 1.01090735,
       1.00132776, 0.99711267, 1.00129545, 1.00500702, 0.99937595,
       1.00603761, 0.98960716, 0.99932355, 0.99687272, 1.00332839,
       0.991147  , 0.99643908, 0.99279811, 1.00112179, 1.00012058,
       0.9989405 , 1.00150169, 1.00683601, 0.99885708, 0.99632519,
       1.00112315, 0.99280336, 1.00759542, 1.00140661, 1.00183764,
       0.99540866, 1.0002343 , 0.99421579, 1.01169739, 1.00330142,
       0.99977923, 1.00365608, 0.9984007 , 1.00106568, 1.00349778,
       0.99527499, 0.99189253, 0.99477082, 0.99486919, 0.99784054,
       0.99240925, 1.00417557, 0.99566904, 1.00355492, 0.99717846,
       0.99910477, 0.99718301, 1.00711659, 0.99623698, 1.00143697,
       1.00876763, 1.0049953 , 0.99885742, 0.99498201, 1.00324752,
       0.99907905, 0.99762597, 0.99502917, 0.99511507, 1.00991401]), 1.0002981820807302, 0.005332038881947385)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接