VPython在Jupyter的速度明显较慢

VPython在Jupyter的速度明显较慢,python,performance,ipython,jupyter-notebook,vpython,Python,Performance,Ipython,Jupyter Notebook,Vpython,我想在jupyter笔记本上重写一些Vpyton脚本。到目前为止,我还没有遇到很多问题,但我试图重写的最后一个问题变得非常缓慢。它在VIDLE中运行得非常快。我将sierraOS与Python 3.5.0和Jupyter 4.1.0一起使用 代码创建一些对象,然后在while循环中更改它们的位置。 最初循环有visual.rate(5000),但我尝试将其减少到50,但没有效果。我还尝试将对象的数量减少到只有两个,但仍然非常缓慢。下面是我最简单的代码版本: from vpython import

我想在jupyter笔记本上重写一些Vpyton脚本。到目前为止,我还没有遇到很多问题,但我试图重写的最后一个问题变得非常缓慢。它在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
从vpython导入场景、球体、颜色、曲线、箭头、mag、向量、速率、画布
场景=画布(宽度=800,高度=600)
obj0=球体(位置=矢量(0,0,0),半径=5e11)
obj1=球体(位置=矢量(5e12,0,0),半径=5e11)
trail1=曲线()
#一些初始值
G=6.7E-11
obj0.mass=2.0E30
obj0.动量=向量(0,0,0)
obj1.1质量=1.0E26
obj1.1动量=矢量(0,0,0)
dt=200000。
崩溃滞后=0
而(CrashFlag==0):
费率(1000)
obj1.力=-G*(obj0.质量*obj1.质量*obj1.位置)/(磁力(obj1.位置)**3)
obj1.动量=obj1.动量+dt*(obj1.力)
obj1.pos=obj1.pos+dt*obj1.MONTORM/obj1.mass
trail1.append(pos=obj1.pos)

如果(Mug(Obj.POS)

)在某些Javyter中VPython操作比经典慢,因为很多经典都是用C++编写的,而Jupyter VPython是用Python实现的(尽管向量类已经被细胞化)但是,另一个问题是,从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,例如。

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

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