首页 > 解决方案 > scipy.spatial.transform.Rotation 旋转数组与同一对象内的堆栈

问题描述

在一个项目中,我必须在 python 中存储一个对象的一系列连续旋转。我打算使用scipy.spatial.transform.Rotation objects存储它们。

我注意到有两个选项可用。

  1. 我将多个 Rotation 对象存储在一个数组中,每个 Rotation 对象都包含我序列的一个旋转。

  2. 我将每个旋转都存储在同一个 Rotation 对象中,有效地将它们堆叠在一个对象中。

我想知道这些方法在计算速度和数据访问速度方面的权衡是什么。最终应该首选哪种方法。

在我的特殊情况下:

我在找什么:

提前致谢。

标签: pythonperformancescipyscipy-spatial

解决方案


好的,所以我将加入我拥有的第一个元素。

对于两者,您最终都会访问一个可迭代对象和一个对象(只是以不同的顺序)。因此,访问速度应该没有任何重大差异。

之后 R 的列表更容易访问和操作。因此,如果您愿意更改旋转顺序中的任何内容,这是更简单的方法。使用单个对象需要一些额外的代码进行操作,并且可能会更慢。 然而,这真的取决于你做什么,我没有数据证明它明显变慢。

单个对象应该占用更少的内存空间,因为只有一个实例,而对象列表的 nb_rotation 次数更多。 我已经提到这在我的情况下并不重要,这并不重要。同样,我没有任何数据来支持这一点,但我预计差异会很大,因为我有大约 2'000'000 次旋转。

关于这些事实,我将做出如下决定:

  • 如果您只是想使用对象进行存储,那么单个对象可能更有效。(但是,这将适用于非常特殊的情况,因为您还可以计算结果旋转并存储单个四元数或旋转对象)

  • 如果您希望以任何方式操作您的数据,那么对象列表似乎更能说明这一点。唯一真正的缺点是内存使用,但是如果您操作数据,您还必须在某些时候解包单个对象,导致类似的问题,如果不是由于数据重复而更糟的话。

就我而言,我将使用对象列表。


推荐阅读