gpt4 book ai didi

python - 对象列表或并行属性数组?

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:26 25 4
gpt4 key购买 nike

基本上,问题是:从性能方面和设计方面来说,哪个更可取 - 拥有一个 Python 类的对象列表还是拥有多个数字属性列表?

我正在编写某种科学模拟,其中涉及相当大的相互作用粒子系统。为简单起见,假设我们有一组在盒子内弹跳的球,因此每个球都有许多数值属性,如 x-y-z 坐标、直径、质量、速度矢量等。如何更好地存储系统?我能想到的两个主要选择是:

使用这些属性和一些方法创建一个类“Ball”,然后存储该类的对象列表,例如。 G。 [b1, b2, b3, ...bn, ...],对于每个 bn,我们可以访问 bn.x、bn.y、bn.mass 等等;

为每个属性创建一个数字数组,然后对于每个第 i 个“球”,我们可以访问它的 'x' 坐标为 xs[i],'y' 坐标为 ys[i],'mass' 为质量[i]等;

在我看来,第一个选项代表了更好的设计。第二个选项看起来有点难看,但在性能方面可能更好,并且它可以更容易地与 numpy 和 scipy 一起使用,我尽可能多地使用它们。

我仍然不确定 Python 是否足够快,因此在使用 Python 进行初始原型(prototype)设计之后,可能需要用 C++ 或其他语言重写它。对于 C/C++,数据表示的选择会有所不同吗?混合方法怎么样,例如带有 C++ 扩展的 Python?

更新:我从没想过并行数组本身会带来任何性能提升,但在像 Python + Numpy(或任何 SlowScriptingLanguage + FastNativeLibrary)这样的混合环境中使用它们可能(或可能不会?)让您将更多工作从缓慢的脚本代码中转移到快速的 native 库中。

最佳答案

在这个例子中,每个球都有一个对象当然是更好的设计。对于不支持适当对象的语言,并行数组确实是一种变通方法。我不会在具有 OO 功能的语言中使用它们,除非它是一个适合函数的小案例(甚至可能不适合),或者如果我已经用完所有其他优化选项并且探查器显示属性访问是罪魁祸首。这一点适用于 Python 的程度是适用于 C++ 的两倍,因为前者非常重视可读性和优雅。

关于python - 对象列表或并行属性数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com