You need to enable JavaScript to run this app. 如何计算[-1,1]×[-1,1]上多元均匀分布的点密度并优化实现
优惠活动
大模型
产品
解决方案
定价
更多

如何计算[-1,1]×[-1,1]上多元均匀分布的点密度并优化实现

针对2维固定域的极速实现

如果你的使用场景固定为[-1, 1] × [-1, 1]的均匀分布,直接用简化逻辑即可,注意你之前的临时实现存在笔误,边界判断应该是np.abs(x) <=1而非<=2:

def uniform_2d_square(x):
    return 0.25 if np.abs(x).max() <= 1 else 0.0

这个实现比np.all的版本性能略高,单样本场景下运算步骤更少。

通用多维均匀分布的优化实现

你写的通用版本逻辑正确,可针对高频调用和批量输入做两点优化:

  • 提前计算归一化常数,避免每次调用重复计算区间长度乘积
  • 支持批量输入多个点,无需循环调用
class MultivariateUniform:
    def __init__(self, lows, highs):
        self.lows = np.asarray(lows)
        self.highs = np.asarray(highs)
        self.norm = 1.0 / np.prod(self.highs - self.lows)
    
    def pdf(self, x):
        x = np.asarray(x)
        in_bound = np.all((x >= self.lows) & (x <= self.highs), axis=-1)
        return in_bound * self.norm

使用示例:

# 初始化分布
dist = MultivariateUniform(lows=[-1, -1], highs=[1, 1])
# 单样本计算
print(dist.pdf([0, 0])) # 输出 0.25
# 批量计算多个点的PDF
print(dist.pdf([[0,0], [2,0], [-0.5, 0.5]])) # 输出 [0.25, 0. , 0.25]
最规范的官方方案

scipy 1.7及以上版本提供了原生的多维均匀分布实现,经过官方性能优化,是最推荐的方案,完美解决你之前调用单变量uniform返回向量的问题:

import numpy as np
from scipy.stats import multivariate_uniform

# loc为各维度最小值,scale为各维度区间长度
dist = multivariate_uniform(loc=[-1, -1], scale=[2, 2])
x = np.zeros(2)
print(dist.pdf(x)) # 直接输出标量 0.25

如果使用的是旧版本scipy,用上面自定义的类即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 21:36:07