簡體   English   中英

在 Python 中生成 100 個正態分布的隨機數

[英]Generate 100 normally distributed random numbers in Python

我是 Python 的極端初學者,我很難編寫非常簡單的代碼。

我正在嘗試編寫一個簡單的代碼,通過使用期望為 1.0 和標准差為 0.005 的函數 gauss 生成 100 個正態分布數,然后存儲在一個數組中,該數組可用於計算這 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。 我的代碼幾乎沒有什么問題,我應該如何修復它。

如果有人可以提供一些幫助,將不勝感激。 非常感謝!

import numpy as np

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

在這里您可以找到使用 numpy 進行正態分布的文檔:http: //docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.random.normal.html

然后您可以使用以下方法計算平均值: my_mean_value = np.mean(L)

你必須記住,如果你想打印一些東西,你需要使用print my_mean value

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)]

代碼應該在 Python 中縮進,但只是當我輸入 StackOverflow 時,我才真正知道如何縮進它。

您只需使用空格縮進。

我嘗試了 Python 中的代碼,但 L 沒有打印任何內容。

好吧,您的函數沒有return任何值。 現在編輯您的代碼返回一個整數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)

試試下面的代碼,

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)

返回生成的數字和平均值

這將使用高斯創建一個包含 n 個隨機數的列表。 將隨機導入為 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

為了在 Python 中使用函數 gauss 生成 100 個正態分布的隨機數,期望值為 1.0,標准差為 0.005,可以使用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)

然后使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM