2016-08-23 67 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)