吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 292|回复: 3
收起左侧

[求助] py如何在固定范围内生成具有最小距离的随机数?

[复制链接]
一个学渣 发表于 2024-12-8 11:48
py如何在固定范围内生成具有最小距离的随机数?


比如范围1-100
min_dis=6.8
num_need=10



代码该怎么写比较好?或者有没有什么库能用?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jing99 发表于 2024-12-8 11:55
import random

def generate_random_numbers(min_dis, num_need, range_start, range_end):
    if num_need > (range_end - range_start) / min_dis:
        raise ValueError("The number of needed numbers exceeds the possible unique numbers with the given minimum distance.")

    numbers = []
    while len(numbers) < num_need:
        new_num = random.uniform(range_start, range_end)
        if not any(abs(new_num - num) < min_dis for num in numbers):
            numbers.append(new_num)
    return numbers

# 使用示例
min_dis = 6.8
num_need = 10
range_start = 1
range_end = 100

random_numbers = generate_random_numbers(min_dis, num_need, range_start, range_end)
print(random_numbers)


用kimi助手生成的,我不了解这个最小距离,您可以参考一下?

这段代码首先检查是否可能在给定的范围内生成所需数量的随机数,如果不可能,则抛出一个错误。然后,它使用一个循环来生成随机数,直到达到所需数量。在每次循环中,它检查新生成的随机数是否与列表中已有的任何随机数的距离小于最小距离。如果不是,就将这个新随机数添加到列表中。

请注意,这个算法在最坏情况下可能会非常慢,特别是当所需随机数的数量接近范围允许的最大数量时。这是因为随着列表的增长,找到一个满足条件的新随机数变得越来越困难。

如果你需要一个更高效的解决方案,你可能需要使用更复杂的算法,或者考虑使用专门的库。但是,对于大多数实际应用来说,上面的代码应该足够了。如果你的应用场景对性能有特别高的要求,你可能需要进一步研究和优化这个算法。
shichen52 发表于 2024-12-8 12:08
import random

def generate_numbers(start, end, min_distance, num_needed):
    if (end - start) < (num_needed - 1) * min_distance:
        raise ValueError("Range is too small to generate the required number of numbers with the given minimum distance.")
   
    numbers = []
   
    # Generate the first number randomly within the range
    current_number = random.uniform(start, end - (num_needed - 1) * min_distance)
    numbers.append(current_number)
   
    # Generate the rest of the numbers
    for _ in range(1, num_needed):
        # Ensure the next number is at least min_distance away from the current one
        next_min = current_number + min_distance
        next_max = end - ((num_needed - len(numbers) - 1) * min_distance)
        
        if next_min >= next_max:
            raise ValueError("Not enough space to generate the remaining numbers with the given minimum distance.")
        
        current_number = random.uniform(next_min, next_max)
        numbers.append(current_number)
   
    return sorted(numbers)

# Example usage
start = 1
end = 100
min_distance = 6.8
num_needed = 10

random_numbers = generate_numbers(start, end, min_distance, num_needed)
print(random_numbers)
HalfAnElephant 发表于 2024-12-12 19:22
自己写了一段,大概思路就是在保证每个数字之差大于 min_dis 的基础上,进行调整。如果出错还请见谅。
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
import random
def rand_gen(n, low, high, min_dis):
    t = (high - low - n * min_dis) / n
    cur = low
    res = []
    for i in range(n):
        res.append(cur + random.random() * t)
        cur += min_dis
    return res
 
if __name__ == '__main__':
    print(rand_gen(10, 1, 100, 6.8))
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-9 17:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表