gpt4 book ai didi

python - 从图的度分布中采样

转载 作者:行者123 更新时间:2023-11-30 23:24:45 25 4
gpt4 key购买 nike

我有一个简单、愚蠢的 Python 问题。给定一个图,我尝试从一个随机变量中采样,该变量的分布与图的度分布相同。

这看起来应该非常简单。但不知何故,我仍然设法把这件事搞砸。我的代码如下所示:

import numpy as np
import scipy as sp
import graph_tool.all as gt

G = gt.random_graph(500, deg_sampler=lambda: np.random.poisson(1), directed=False)
deg = gt.vertex_hist(G,"total",float_count=False)

# Extract counts and values
count = list(deg[0])
value = list(deg[1])

# Generate vector of probabilities for each node
p = [float(x)/sum(count) for x in count]

# Load into a random variable for sampling
x = sp.stats.rv_discrete(values=(value,p))
print x.rvs(1)

但是,运行此命令后会返回错误:

Traceback (most recent call last):
File "temp.py", line 16, in <module>
x = sp.stats.rv_discrete(values=(value,p))
File "/usr/lib/python2.7/dist-packages/scipy/stats/distributions.py", line 5637, in __init__
self.pk = take(ravel(self.pk),indx, 0)
File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 103, in take
return take(indices, axis, out, mode)
IndexError: index out of range for array

我不知道这是为什么。如果在上面的代码中我改为这样写:

x = sp.stats.rv_discrete(values=(range(len(count)),p))

然后代码运行良好,但它给出了一个奇怪的结果 - 显然,按照我指定此分布的方式,“0”值应该是最常见的。但这段代码很有可能给出“1”,并且永远不会返回“0”,因此某些内容以某种方式发生了转移。

谁能澄清一下这是怎么回事?任何帮助将不胜感激!

最佳答案

我相信 x.rvs() 的第一个参数是 loc 参数。如果您通过调用 x.rvs(1) 生成 loc=1,则会将 1 添加到所有值。

相反,你想要

x.rvs(size=1)
<小时/>

顺便说一句,我建议您替换它:

# Extract counts and values
count = list(deg[0])
value = list(deg[1])

# Generate vector of probabilities for each node
p = [float(x)/sum(count) for x in count]

与:

count, value = deg       # automatically unpacks along first axis
p = count.astype(float) / count.sum() # count is an array, so you can divide all elements at once

关于python - 从图的度分布中采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com