首页 / PYTHON / Python元素访问性能
Python元素访问性能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python元素访问性能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2235字,纯文字阅读大概需要4分钟。
内容图文
![Python元素访问性能](/upload/InfoBanner/zyjiaocheng/728/e718ed7f62e9471189c957af2576ef5c.jpg)
作为一名长期的C开发人员,我刚开始研究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
任何有关这方面的帮助将非常感激.我希望尽可能快地获得算法.
提前致谢!干杯!
解决方法:
比较时间看起来很大,因为mathutils.geometry.intersect_ray_tri()非常快.该方法在扩展中实现并以本机速度执行.
该方法的Python时间用于:
>创建新的功能框架(只有一个表达式,时间占比较大)
>全局名称查找(这些是针对映射完成的,本地名称使用数组).
>属性查找,如mathutils.geometry和mathutils.geometry.intersect_ray_tri和poly.loop_start
>索引,所以worldCoordinateVertices […].
您可以通过在本地名称或默认参数中缓存其中一些结果来加快速度:
def rayIntersectsTriangle(
origin, direction, meshData, poly, worldCoordinateVertices
_intersect_ray_tri=mathutils.geometry.intersect_ray_tri):
loop_start = poly.loop_start
meshData_loops = meshData.loops
return _intersect_ray_tri(
worldCoordinateVertices[meshData_loops[loop_start].vertex_index],
worldCoordinateVertices[meshData_loops[loop_start + 1].vertex_index],
worldCoordinateVertices[meshData_loops[loop_start + 2].vertex_index],
direction, origin) is not None
我也用过不是没有;这是一个建议用于测试None单例的指针操作.
这使得8个属性查找下降到2,并删除了mathutils的全局名称查找.
尽管如此,这些都是微优化,只有当它们确实产生影响时才会这样做(例如,在您的代码中调用该方法很多).如果这确实是您的瓶颈,请考虑使用Cython作为将此代码转换为也可以以原生速度运行的编译扩展的简单途径.
内容总结
以上是互联网集市为您收集整理的Python元素访问性能全部内容,希望文章能够帮你解决Python元素访问性能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。