【问题标题】:VPython significantly slower in JupyterJupyter 中的 VPython 显着变慢
【发布时间】:2016-12-29 22:44:05
【问题描述】:

我正在尝试在 jupyter 笔记本中重写一些 vpython 脚本。到目前为止,我还没有遇到很多问题,但是我尝试重写的最后一个问题变得明显变慢了。它在 VIDLE 中运行得非常快。我将 sierraOS 与 Python 3.5.0 和 Jupyter 4.1.0 一起使用。

代码创建一些对象,然后在一个while循环中改变它们的位置。 最初循环有visual.rate(5000),但我尝试将其减少到50,但无济于事。我还尝试将对象的数量减少到只有两个,但仍然工作得很慢。这是我最简单的代码版本:

from vpython import scene, sphere, color, curve, arrow, mag, vector, rate,canvas
scene = canvas(width=800, height=600)
obj0 = sphere(pos=vector(0,0,0), radius=5e11)
obj1 = sphere(pos=vector(5e12,0,0), radius=5e11)
trail1= curve()

#some initial value
G = 6.7E-11
obj0.mass = 2.0E30
obj0.momentum = vector(0,0,0)
obj1.mass = 1.0E26
obj1.momentum = vector(0,0,0)

dt=200000.          
CrashFlag=0         

while(CrashFlag==0):
    rate(1000)
    obj1.force= -G*(obj0.mass*obj1.mass*obj1.pos)/(mag(obj1.pos)**3)
    obj1.momentum = obj1.momentum+ dt*(obj1.force)
    obj1.pos = obj1.pos + dt*obj1.momentum/obj1.mass
    trail1.append(pos=obj1.pos)
    if (mag(obj1.pos)<2.e11) :
        CrashFlag=1

您能找出任何会导致 Jupyter 笔记本特别慢的原因,或者提出任何解决方法吗?否则,是否可以在 VIDLE 中输出模拟而不是在 Jupyter 笔记本中内联(而代码仍将在 Jupyter 笔记本中运行)

【问题讨论】:

    标签: python performance ipython jupyter-notebook vpython


    【解决方案1】:

    Jupyter 中的一些 VPython 操作比 Classic 慢,因为大部分 Classic 是用 C++ 编写的,而 Jupyter VPython 是用 Python 实现的(尽管向量类已经过 Cythonized)。但是,另一个问题是从 Python 程序向笔记本发送大量数据的成本很高,因此我建议去掉 trail1 和 trail1.append,因为您在每次循环迭代中都发送数据。相反,说 obj1 = sphere(pos=vector(5e12,0,0), radius=5e11, make_trail=True)。然后点将被添加到笔记本端的轨迹中,而无需向笔记本发送任何内容。您还可以考虑在 obj1 构造函数中将间隔设置为默认值 1 以外的值。

    在每次循环迭代中更新 obj1.pos 时存在类似问题。您通过从服务器到浏览器的相对狭窄的管道每秒发送 1000 个 obj1.pos 更新。考虑在每次迭代中更新变量“pos”,但仅每 50 次迭代更新 obj1.pos。

    【讨论】:

      【解决方案2】:

      现在可以从 IDLE 运行 vpython 模块。 VPython 7 检测到您没有在 Jupyter 笔记本中运行并设置自己与浏览器的通信,并且在某些情况下,这种通信似乎比 Jupyter 的更快。但是,我不知道这是否会对您的情况产生影响。 VIDLE(或 IDLE)无法输出 3D 动画。

      我会宣传,在 VPython 论坛中提出 VPython 问题的更好地方

      https://groups.google.com/forum/?fromgroups&hl=en#!forum/vpython-users

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        • 2017-05-27
        • 2018-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多