是一个很长时间的C++开发人员我刚开始着手Python中的算法。我目前正在分析我的代码,以了解如何在Python中高效编程。有一件事特别突出,我很乐意得到专家的解释。Python元素访问性能
我写此包装函数的光线 - 三角形相交:
def rayIntersectsTriangle(origin , direction , meshData , poly , worldCoordinateVertices):
return mathutils.geometry.intersect_ray_tri(worldCoordinateVertices[ meshData.loops[ poly.loop_start ].vertex_index ],
worldCoordinateVertices[ meshData.loops[ poly.loop_start + 1 ].vertex_index ],
worldCoordinateVertices[ meshData.loops[ poly.loop_start + 2 ].vertex_index ],
direction , origin) != None
如果在分析(使用CPROFILE)执行该功能有很多次代码我有以下的结果:
ncalls tottime percall cumtime percall filename:lineno(function)
15694126 22.314 0.000 25.812 0.000 ****.py:176(rayIntersectsPoly)
[...]
15694126 3.497 0.000 3.497 0.000 {built-in method mathutils.geometry.intersect_ray_tri}
这个包装怎么会增加这么多的开销?我唯一能看到的是数组元素访问。来自C++这真让我困惑:D
任何对此的帮助将超级赞赏。我想尽可能快地获得我的算法。
在此先感谢!干杯!
请参阅https://wiki.python.org/moin/TimeComplexity –
......顺便说一句,如果以数学为中心的工作负载的运行时性能是您的首要目标,那么Python可能不是您的语言。我可能会建议[Julia](https://julialang.org/)或[Go](https://golang.org/)? (Julia的网页涵盖了这两个基准)。 –
太棒了。感谢您的资源。我目前正在为Blender开发一个插件,所以我没有替代Python的 – Marcel