我正在尝试获取一个n维概率向量网格 - 向量中的每个条目都在0和1之间,所有条目加起来等于1。我希望有可能的每个向量,其中坐标可以取0到1之间均匀间隔的数字v值之一。
为了说明这一点,以下是一个非常低效的实现,当n = 3,v = 3:
为了说明这一点,以下是一个非常低效的实现,当n = 3,v = 3:
from itertools import product
grid_redundant = product([0, .5, 1], repeat=3)
grid = [point for point in grid_redundant if sum(point)==1]
现在grid
包含[(0, 0, 1), (0, 0.5, 0.5), (0, 1, 0), (0.5, 0, 0.5), (0.5, 0.5, 0), (1, 0, 0)]
。
这种“实现”对于更高维度和更细粒度的网格来说非常糟糕。有没有一种好的方法来解决这个问题,也许使用numpy
?
我可以添加激励点:如果只是从随机分布中采样给了我足够极端的点,那我可能会很高兴,但事实并非如此。请参见此问题。我所追求的“网格”不是随机的,而是系统地扫描单纯形(概率向量的空间)。