scipy.spatial.transform.Rotation 同一对象内的旋转数组与堆栈

scipy.spatial.transform.Rotation Array of rotation vs Stack inside the same object

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

来存储它们

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

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

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

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

以我为例:

我在找什么:

提前致谢。

好吧,我会把我拥有的第一个元素放进去。

对于两者,您最终会访问一个可迭代对象和一个对象(只是顺序不同)。因此访问速度应该没有什么大的区别。

R的列表以后更容易访问和操作。因此,如果您易于更改轮换顺序中的任何内容,这是更简单的方法。使用单个对象需要一些 extra-code 进行操作,并且可能会更慢。 但是这真的取决于你做什么,我没有数据证明它明显更慢。

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

根据这些事实,我将做出如下决定:

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

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

在我的例子中,我将使用对象列表。