Python 中带边界的向量化随机游走

2024-01-09

我正在尝试在 python 中模拟带有边界的二维随机游走(粒子/对象将无法跨越边界并且必须返回)。然而我的版本没有矢量化并且非常慢。如何在不使用(或最小化)循环的情况下实现它。

这是我的方法

def bound_walk():

    Origin = [0, 0] #Starting Point

    #All Possible directiom
    directions = ((-1, 1), (0, 1), (1, 1),
                 (-1, 0)        , (1, 0),
                 (-1, -1), (0, -1), (1, -1))


    #Directions allowed when x-coordinate reaches boundary
    refelectionsx = ((-1, 1), (0, 1),
                 (-1, 0),(-1, -1), (0, -1))

    #Directions allowed when y-coordinate reaches boundary
    refelectionsy = ((-1, 0)        , (1, 0),
                 (-1, -1), (0, -1), (1, -1))

    points = [(0, 0)]
    for i in range(20000):
        direction = choice(directions)
        reflection1 = choice(refelectionsx)
        reflection2 = choice(refelectionsy)
        if Origin[0]>50: #Boundary==50
            Origin[0] += reflection1[0]
        elif Origin[0]<-50:
            Origin[0] -= reflection1[0]
        else:
            Origin[0] += direction[0]

        if Origin[1]>50:
            Origin[1] += reflection2[1]
        elif Origin[1] < -50:
            Origin[1] -= reflection2[1]
        else:
            Origin[1] += direction[1]
        points.append(Origin[:])
    return points

这是一种快速的方法,但不能 100% 等同于您的实现。不同之处在于,在我的实现中,在边界处,沿着与边界平行的方向之一前进的机会是从边界后退的方向的一半。如果您将方向视为对连续方向进行分箱的结果,那么这可以说是更好的模型,因为边界将相关分箱切成两半。

如果您尝试一下,您会发现它可以立即或多或少执行 1000 万步。

诀窍是我们简单地“展开”空间,这样我们就可以模拟无约束的随机游走,这是很便宜的,然后最后我们将它折叠回边界矩形。

# parameters
>>> directions = np.delete(np.indices((3, 3)).reshape(2, -1), 4, axis=1).T - 1
>>> boundaries = np.array([(-50, 50), (-50, 50)])
>>> start = np.array([0, 0])>>> steps = 10**7
>>>
# "simulation" 
>>> size = np.diff(boundaries, axis=1).ravel()
>>> 
>>> trajectory = np.cumsum(directions[np.random.randint(0, 8, (steps,))], axis=0)
>>> trajectory = np.abs((trajectory + start - boundaries[:, 0] + size) % (2 * size) - size) + boundaries[:, 0]
>>> 
# some sanity checks
# boundaries are respected
>>> print(trajectory.min(axis=0))
[-50 -50]
>>> print(trajectory.max(axis=0))
[50 50]
# step size looks ok
>>> print(np.diff(trajectory, axis=0).min(axis=0))
[-1 -1]
>>> print(np.diff(trajectory, axis=0).max(axis=0))
[1 1]
# histograms of time spent at coordinates looks flat
>>> print(np.bincount(trajectory[:, 0] - boundaries[0, 0]))
[ 50276 100134 100395 100969 101218 101388 101708 100688 101460 102667
 103613 103652 103540 103296 102676 102105 102766 102855 101786 101246
 101442 101152 101020 100498 100637 100588 100100  99745 100034  99878
  99120  98076  98193  98126  97715  98317  98343  97693  97391  96854
  96576  96906  96423  96445  96779  96672  96376  95747  95732  95881
  96833  97149  98490  99692  99519  98800  99497 100070 100065  99816
  99838 100470 100466 100887 100461 100033  99405  99425 100537 100227
 100796 101668 101218 101413 101559 101258 101416 101292 100567 100022
 100266 100770 100882 100519 100326 100795 101066 101293 101667 101666
 101040 101221 101019 100868 101681 100778 100121  98500  98174  98308
  49254]
>>> print(np.bincount(trajectory[:, 1] - boundaries[1, 0]))
[ 52316 104725 104235 103801 102936 102269 102604 102557 102514 103063
 102130 101805 101699 102285 102456 102464 102590 104010 103502 103105
 102784 102927 103430 104750 104671 104836 104547 103280 102131 101548
 101173 101806 101345 101959 101525 101061 101260 100774 100126  98806
  99209 100105  99686 100418 101056 101434 101078 101680 103042 103732
 103003 102047 100832 100489 100809 100429 101325 102420 102282 102205
 101341 100644  99827  99482  98931  98588  97911  97981  97053  96794
  96818  97364  97025  97093  97807  98594  98280  98406  98474  98516
  98555  98713  98381  98296  97600  97374  97423  97092  96238  95771
  95547  95325  94710  94115  93332  92219  91309  91780  92399  92345
  45461]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中带边界的向量化随机游走 的相关文章

  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 将 matplotlib 颜色图集中在特定值上

    我正在使用 matplotlib 颜色图 seismic 绘制绘图 并且希望白色以 0 为中心 当我在不进行任何更改的情况下运行脚本时 白色从 0 下降到 10 我尝试设置 vmin 50 vmax 50 但在这种情况下我完全失去了白色 关
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • 使用 Firefox 绕过弹出窗口下载文件:Selenium Python

    我正在使用 selenium 和 python 来从中下载某些文件web page http www oceanenergyireland com testfacility corkharbour observations 我之前一直使用设
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 在Python中按属性获取对象列表中的索引

    我有具有属性 id 的对象列表 我想找到具有特定 id 的对象的索引 我写了这样的东西 index 1 for i in range len my list if my list i id specific id index i break
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐

  • Spring Framework 3 和会话属性

    我有一个表单对象 我将其设置为在 Spring 控制器的 GET 请求处理程序中请求 用户第一次进入页面时 应创建一个新的表单对象并将其设置为请求 如果用户发送表单 则表单对象将从请求中填充 现在表单对象具有所有用户给定的属性 然后验证表单
  • Blazor WebAssembly 3.1 目标框架缺失

    我使用 NET Standard 3 1 创建了 NET Core Web API 和类库 但是当我尝试使用 3 1 创建 Blazor WebAssembly 时 它会自动创建 2 1 版本 如下所示 这是我的 Blazor Web NE
  • Chrome 扩展:将变量传递给弹出窗口

    我正在尝试为 Google Chrome 创建一个扩展程序 我正在监视页面文本选择 并且希望当我单击弹出按钮时弹出页面接收所选文本 有没有办法将变量传递给弹出窗口 我知道 消息传递不适用于关闭的弹出窗口 那么我该怎么办 选择文本后 将其发送
  • 属性网格仅显示某些类别

    我有一个 PropertyGrid 用于具有以下属性类别的对象 样式 计算和其他 我想要的是只向用户显示 Calcul 类别 但我不想使用可浏览属性 因为我希望所有这些属性在 Visual studio 中可见 所以 我需要的是一个代码内解
  • 如何在多个线程中修改向量的每个部分[重复]

    这个问题在这里已经有答案了 我有一个向量u8我需要用可以并行计算的值填充这个向量 let vector Vec
  • GIF 动画在 Windows 窗体中不起作用

    我有 2 个 WinForm Form2 使用 Infragistics ultraTabControl 在选项卡更改中 我显示 Form1 In Form1 我有一个PictureBox分配有动画GIF In Form2 我像这样显示 F
  • 埃拉托色尼并行筛 - Java 多线程

    我想编写埃拉托斯特尼筛法 它将使用特定数量的线程来工作 我发现 它将按以下方式工作 2 个线程 最多 17 个 Thread 1 获取 2 并开始从 List 中删除 2 的倍数 并行线程 2 需要 3 个线程并执行相同的操作 之后 Thr
  • 如果我已经发布的 v1 没有版本化核心数据模型,我可以使用“自动轻量级迁移”吗?

    如果我已经发布的 v1 没有版本化核心数据模型 我可以使用 自动轻量级迁移 吗 如果是 我需要应用的记录步骤是否有任何关键更改 你不仅可以做到这一点 从某种意义上说 这是你可以做到这一点的唯一方法 来自苹果文档 http developer
  • C# dotnet core 2.0 的 AOP,在方法体运行之前访问方法参数值

    这是我的方法 我正在尝试验证componentToSave 或访问方法参数值 并在方法体运行之前抛出异常 public Component SaveComponent Component componentToSave 我尝试使用 Post
  • React 自定义钩子与普通函数,有什么区别

    我正试图把我的头围绕在定制的钩子上 我理解普通的钩子就可以了 但我的问题是 在编写自定义钩子时 它和普通函数有什么区别 我的意思是为什么不称其为普通函数而不是称其为 use 之类的东西 我相信没有人准确回答你的问题 我仍然了解拥有这个称为钩
  • 组合两个位图图像时出现空指针异常

    我正在使用一种方法combine two Bitmap Images并写在SDCard 该应用程序 在模拟器中工作正常 但是当我尝试在真实设备上执行时 它通过了Null Pointer Exception在这条线上cs Bitmap cre
  • 有没有办法检查 Windows 中的多处理标准模块是否正在加载模块?

    我相信在 Windows 上 因为没有fork the 多重处理module 在新的 Python 进程中重新加载模块 您需要在主脚本中包含此代码 否则会发生非常严重的崩溃 if name main from multiprocessing
  • 使用 SELECT 更改输入

    我想知道一种可能使用 jQuery 来使用 SELECT 更改 INPUT 值的快速方法 任何帮助 将不胜感激 Thanks 将事件处理程序绑定到
  • 如何使用 Firebase Storage 存储到不同的存储桶

    有没有办法使用 Firebase 存储与另一个项目 应用程序通信 存储数据 如何初始化我的应用程序以调用另一个 Firebase 存储桶 参考这个多个 Firebase 数据库 https stackoverflow com questio
  • 如何卸载从 Anaconda 安装的 Jupyter Notebook?

    我遵循以下指示 https jupyter readthedocs io en latest install html安装 Jupyter 笔记本 单用户模式 但是 我实际上需要安装多用户 Jupyter hub 应用程序 如何卸载该应用程
  • WCF 自签名证书在客户端上不受信任

    我有一个 WCF 服务 仅在两台服务器计算机之间使用 它永远不会被公开使用 我希望我可以使用 SSL 和自签名证书来保证安全 我使用 IIS7 创建了一个证书 并使用 IE 和 MMC 个人 TrustedRoot 第三方和 Trusted
  • 我可以使用条带结账来支付订阅和目的地费用(关联帐户)吗?

    我正在尝试通过已连接的帐户使用 Stripe Checkout 我可以在哪里创建订阅传输数据 目的地 and 申请费百分比 预期流量 创建结帐会话 服务器端 checkout session stripe checkout Session
  • ios想要FullScreenLayout状态栏可见

    我面临以下问题 我尝试呈现一个 modalViewController 并使其覆盖整个屏幕 例如 controller setWantsFullScreenLayout yes myNavController presentModalVie
  • 仍然支持 google.loader.clientlocation

    我使用 google loader ClientLocation 进行了一些测试 http www google com jsapi http www google com jsapi 但我的测试结果为空 if google loader
  • Python 中带边界的向量化随机游走

    我正在尝试在 python 中模拟带有边界的二维随机游走 粒子 对象将无法跨越边界并且必须返回 然而我的版本没有矢量化并且非常慢 如何在不使用 或最小化 循环的情况下实现它 这是我的方法 def bound walk Origin 0 0