Python: 如何创建具有给定分布的距离网络?
Python: how to create a distance network with a given distribution?
我有 N
个代理要放置在一个网格 n x n
中,遵循(截断的 Levy)分布
px = (r + r0)**(-beta)*exp(-r/k)
每个代理有两个最喜欢的单元格:home
和 work
并且 px
是每个代理从 home
和 work
移动的概率距离 r
.
def returnLevy(r, beta):
r0 = 100
k = 1500
px = (r + r0)**(-beta)*exp(-r/k)
return px
我已经计算了网格中所有单元格之间的距离,所以
allDistances.head(5):
distances cell_a cell_b
0 1.322959 0 1
1 0.717737 0 2
2 0.454170 0 3
3 0.321495 0 4
4 0.454248 0 5
我想知道是否有一种方法可以按照上述分布为每个代理随机分配距 home
和 work
的距离 r
。最后我想要一个数据框:
agentsCells
distance home work
0 1.322959 320 1089
1 0.717737 4 765
2 0.454170 2100 388
您可以使用 scipy
定义您自己的自定义 pdf
并使用它来计算您的概率密度的有用指标
import scipy.stats as st
class LevyPDF(st.rv_continuous):
def _pdf(self,r):
r0 = 100
k = 1500
return (r + r0)**(-beta)*exp(-r/k) #Normalized over its range [minValue,maxValue]
my_cv = LevyPDF(a=minValue, b=maxValue, name='LevyPDF')
要随机抽取值,您必须首先计算累积分布函数 (cdf
),然后将其取反得到 icdf
。现在可以使用它来绘制 pdf
之后的随机值(您可以找到更多详细信息 )。
如果您已经计算出 cdf
,您可以使用 my_cv.cdf()
.
的数值结果来检查您的结果
我有 N
个代理要放置在一个网格 n x n
中,遵循(截断的 Levy)分布
px = (r + r0)**(-beta)*exp(-r/k)
每个代理有两个最喜欢的单元格:home
和 work
并且 px
是每个代理从 home
和 work
移动的概率距离 r
.
def returnLevy(r, beta):
r0 = 100
k = 1500
px = (r + r0)**(-beta)*exp(-r/k)
return px
我已经计算了网格中所有单元格之间的距离,所以
allDistances.head(5):
distances cell_a cell_b
0 1.322959 0 1
1 0.717737 0 2
2 0.454170 0 3
3 0.321495 0 4
4 0.454248 0 5
我想知道是否有一种方法可以按照上述分布为每个代理随机分配距 home
和 work
的距离 r
。最后我想要一个数据框:
agentsCells
distance home work
0 1.322959 320 1089
1 0.717737 4 765
2 0.454170 2100 388
您可以使用 scipy
定义您自己的自定义 pdf
并使用它来计算您的概率密度的有用指标
import scipy.stats as st
class LevyPDF(st.rv_continuous):
def _pdf(self,r):
r0 = 100
k = 1500
return (r + r0)**(-beta)*exp(-r/k) #Normalized over its range [minValue,maxValue]
my_cv = LevyPDF(a=minValue, b=maxValue, name='LevyPDF')
要随机抽取值,您必须首先计算累积分布函数 (cdf
),然后将其取反得到 icdf
。现在可以使用它来绘制 pdf
之后的随机值(您可以找到更多详细信息 cdf
,您可以使用 my_cv.cdf()
.