我使用numpy的random.choise来获取范围(0,1000)内的n个整数,其中同一个整数不能被选择两次(replace=false)。
但是由于每个整数都是一个具有一定长度(例如-10)的子列表的起点,所以我希望随机函数不从已经选择的整数中选择任何其他+- 10的整数。
使用p=参数是不可能的,因为我事先不知道哪些n会被选择。(可以使用循环-每次迭代,新选择的整数的+-10个整数被添加到概率列表中,分配概率为0,但在我看来这不是最佳解决方案......)
例如:
myseries = list(range(1000))
n = 30
blockRange = 10
np.random.choice(myseries, n, replace=False)
字符串
这将返回30个数字,其中两个是33和37 -但我想“禁止”这一点(如果有33,则不允许24到42之间的数字!)
谢谢
2条答案
按热度按时间4zcjmb1e1#
一个解决方案是迭代地构建它,它肯定会比numpy方法慢,但我找不到一种方法来用numpy实现特定的随机分布。
我创建了一个
res
列表和一个forbidden
集合。我重复
n
次(这里是n=30
),尝试计算一个特定范围内的随机数。如果它不是 * 禁止的 *,意味着这个数不在forbidden
集合中,我可以将它添加到res
列表中。我还将这个范围内的每个
int
添加到forbidden
集合中:[rand_num-9; rand_numb[
。但是如果它在我的
forbidden
集合中,我会通过while
循环重试,以找到合适的随机数。验证码:
字符串
5sxhfpxr2#
一个技巧可以是在数字之间生成随机空间,并将其规范化以保持在给定范围内。
以下是我使用的代码:用途:
字符串