python - 如何使用 python 的 scipy.stats.levy 限制步长?
问题描述
我正在尝试使用scipy.stats.levy
. 它工作正常,除了有几个步骤非常大,我想知道是否有适当的方法来限制步长。
这是我正在使用的代码:
import numpy as np
from scipy.stats import uniform
from scipy.stats import levy
import matplotlib.pyplot as plt
def levy_walk( n ):
# uniformly distributed angles
angle = uniform.rvs( size=(n,), loc=.0, scale=2.*np.pi )
# levy distributed step length
r = levy.rvs( size=n )
# x and y coordinates (position added to previous coordinate --> cum. sum)
x = np.cumsum( r * np.cos(angle) )
y = np.cumsum( r * np.sin(angle) )
return np.array( (x, y, r, angle) )
# number of steps to simulate
n = 500
# get levy walk (strictly speaking, it seems to be a flight)
foo = levy_walk( n )
# initialize figure
fig = plt.figure( figsize=(14,6) )
# plot 2D random walk with Levy stepsize
ax1 = fig.add_subplot( 1,2,1 )
ax1.plot( foo[0,:], foo[1,:] )
ax1.set_xlabel( 'x' )
ax1.set_ylabel( 'y' )
ax1.set_title( '2D Levy flight' )
# plot histogram
ax2 = fig.add_subplot( 1,2,2 )
num_bins = n/10
ax2.hist( foo[2,:], bins=n/10 )
ax2.set_yscale( 'log' )
ax2.set_xlabel( 'stepsize' )
ax2.set_title( 'histogram' )
plt.show()
这是一个示例输出图,您可以清楚地看到很少但非常大的步骤的出现:
所以,我的问题是限制步长的正确方法是什么?(使用该scale
选项并没有真正帮助,因为它只会缩小所有内容)
解决方案
这实际上是应有的表现。Levy 分布的期望值为 ∞,它非常“肥尾”。如果这是您正在使用的分布,那么您将获得相当数量的异常大的值。如果您截断这些,则它不是征费分布。所以不,在使用 Levy 分布时没有适当的方法来限制步长。如果您获得的结果与观察数据或您的直觉不匹配,您的替代方法是使用不同的分布来表示步长。
推荐阅读
- jquery - 显示错误 angular.js:12477 TypeError: $(...).intlTelInput is not a function
- android - 使用模式启动谷歌地图方向意图
- python - 我在 python 中对齐结果时遇到问题
- kubernetes - 如何忽略错误 MountVolume.SetUp failed for volume "cofigmap-volume" : configmaps "configmap" not found
- php - 如何从查询中的一个字段获取信息以在另一个查询中使用?
- identityserver4 - 静默刷新 - 使用隐式流时刷新访问令牌不适用于自定义登录 URL
- java - 如何删除maven pom.xml中的系统属性
- xamarin.forms - Xamarin Forms:如何使用 Plugin.MediaManager.Forms 播放视频?
- javascript - 在完整日历日视图中更改当前日期
- web-scraping - Scrapy 不会抓取下一页