You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效生成满足欧氏距离约束的U(-1,1)均匀分布1D随机点对

高效生成满足距离约束的1D均匀分布点对

你当前使用的拒绝采样方案逻辑正确,但当dist远小于采样区间长度(本题默认区间长度为2,dist=0.001)时,绝大多数采样结果都会被丢弃,运行效率极低,最坏情况需要循环数千次才能得到符合要求的点对。

针对1D场景可以直接实现无拒绝的O(1)效率采样,和原方案得到的点对分布完全一致,逻辑如下:

  • 第一步:从U(low_, high_)中独立采样第一个点x
  • 第二步:计算第二个点y的合法采样区间:左边界为max(low_, x - dist),右边界为min(high_, x + dist),保证y既满足和x的距离≤dist,又不会超出指定采样范围
  • 第三步:在上述合法区间内均匀采样得到y即可

优化后的实现代码:

import numpy as np

def point_pair(low_=-1, high_=1, dist=0.001):
    # 边界处理:如果阈值大于区间总长度,所有点对都符合要求
    if dist >= high_ - low_:
        x = np.random.uniform(low=low_, high=high_)
        y = np.random.uniform(low=low_, high=high_)
        return x, y
    # 采样第一个点
    x = np.random.uniform(low=low_, high=high_)
    # 计算第二个点的合法采样区间
    y_low = max(low_, x - dist)
    y_high = min(high_, x + dist)
    # 采样第二个点
    y = np.random.uniform(low=y_low, high=y_high)
    return x, y

该方案没有任何循环和拒绝逻辑,不管dist多小都能单次采样得到结果,运行效率比原方案高几个数量级。如果需要批量生成多组点对,还可以进一步做向量化优化,一次性生成所有x后批量计算y的采样区间,再批量采样得到所有y值,效率更高。

内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:09:03