繁体   English   中英

生成N个随机整数的数组,介于1和K之间,但每个数字至少包含一个

[英]Generate an array of N random integers, between 1 and K, but containing at least one of each number

我需要生成一个介于1K之间的N随机整数的矩阵,其中每个数字至少出现一次, K ≤ N

K远小于N ,我可以使用对numpy.random.random_integers()的调用并检查不同元素的数量,但是当K接近N时,很难获得有效的数组。

有什么好办法可以做到这一点吗? 任何提示将不胜感激。

我认为没有任何内置功能,但是您始终可以制作出想要的确切数组并进行随机播放/重塑。

就像是,

raw_array = np.append(np.arange(1, K+1), np.random.randint(1, K+1, size=(N-K)))
np.random.shuffle(raw_array)

这样可以保证您的范围从1到K,然后剩余的所需数字(N-K)由1到K的随机数填充。

编辑为专门通过K获得1,而不是0至K-1。

用数字1-K迭代填充矩阵,所以如果K为2,N为4,则[1,2,1,2]。 然后在数字不相等的1-N之间随机生成2个随机数,并在这些位置交换数字。

使用xrange(k)填充K个数字,然后使用随机数生成器填充(nk)个数字

您正在寻找np.random.choice(N, size=K, replace=False) doc ,它将返回K不同的数字,最多N

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM