2016-08-23 126 views
-2

是否有辦法創建n個k位數的隨機整數。如何生成n個k位數的隨機整數

例如.. 2000包括[0, 2, 3]

我的特技的隨機整數是使用發電機的一個隨機數,然後分配基於所述範圍值?

但想知道是否有更好的方法來做到這一點在python?

編輯: 實施例:[0,0,0,2,2,3,0,0,2,2,...... 2000米的元件]包括0,2和3 我的方法

def assign(x): 
     if x< 0.3: return 0 
     elif x<0.6: return 2 
     else: return 3 

    x = np.random.rand(num) 

    x = map(lamdba x:assign(x),x) 
+0

這首先需要一些統計模型。或者,與數字2相比,由10^7個數字組成的可能性相等的數字是多少? – sascha

+4

請改善您的問題:1.添加所需的輸出; 2.描述你到目前爲止所嘗試過的東西(用代碼)。看到金獾這樣一個可憐的問題真是奇怪。 –

+0

你能舉個例子嗎?你是否想要生成'n'整數,其中每一個都是'2','3'或'0'的等重量? –

回答

3

從它的聲音,它看起來像你想生成僅使用列表k內找到的值的長度n的序列。

Python的random.choice函數結合列表理解是完美的。

以下函數將生成長度爲n的列表,每個元素都是從k中選擇的隨機元素。

from random import choice 

def random_choices(n, k): 
    return [choice(k) for _ in xrange(n)] 

這和簡單的列表理解是一樣的。

from random import choice 
foo = [choice(k) for _ in xrange(n)] 

*感謝Mr.goosberry用於指出xrangerange在Python 3.x.x.更換

+2

目前尚不清楚這是OP想要什麼,並且沒有任何解釋,即使它不是很好的答案。 –

+1

@AdamSmith對不起,我只是很高興找到一個問題,我可以回答,並想在別人之前寫出我的答案; D – Billylegota

+1

在西部最快的槍是一個真實的東西,但戰鬥的敦促;-) –

1

現在編輯完成後,很清楚你想要什麼。您希望對容器內的某些元素進行離散採樣。如果你想一些具體的概率

import numpy as np 
classes = [0, 2, 3] 
samples = np.random.choice(classes, 2000) 

import numpy as np 
classes = [0, 2, 3] 
samples = np.random.choice(classes, 2000, p=[0.3, 0.3, 0.4]) 

docs

只需準備好您的類和做到這一點。

實現應該比你的方法快得多,有時這種方法被稱爲輪盤採樣或線性搜索採樣。在wiki處提到了一些可能的算法。

1

您可以通過list comprehension來實現。爲了顯示我使用的結果20。根據您的要求將其更改爲2000

>>> import random 
>>> x = 20 
>>> [random.choice([0, 2, 3]) for i in range(20)] 
[2, 2, 3, 2, 0, 2, 3, 2, 3, 3, 3, 0, 3, 2, 3, 2, 3, 2, 3, 2] 
+0

我不完全確定這是OP想要什麼...... –

+0

@AdamSmith怎麼這樣?只是好奇。 –

+1

@AdamSmith找到了你。 –

1

你願意使用numpy的,所以我建議你使用np.random.choice,即:

import numpy as np 

N = 2000 
print[np.random.choice([0, 2, 3], p=[1/3.0, 1/3.0, 1/3.0]) for x in range(N)] 
+0

好冗餘:-) – sascha

+0

@sascha Lol,我們同時發佈,還沒有找到一種方法給3個值的1/3概率...他們不會總和1 – BPL

+0

你在做什麼..如果你想要均勻採樣,那麼不要設置p(= None)! (如果你瘋了:使用'''p = [1/3.0,1/3.0,1/3.0]''')。 – sascha

0
import numpy as np 
N = 10 
# Generate three vectors of n size 
zeros = np.zeros((N,), dtype = np.int) 
twos = np.zeros((N,), dtype = np.int) + 2 
threes = np.zeros((N,), dtype = np.int) + 3 
# Permutate all together 
df = [] 
df = np.append(df, [zeros, twos, threes]) 
df_shuffled = np.random.shuffle(df) 
print(df)