scipy.spatial.transform.Rotation 同一对象内的旋转数组与堆栈
scipy.spatial.transform.Rotation Array of rotation vs Stack inside the same object
在一个项目中,我必须在 python 中存储对象的一系列连续旋转。我打算使用 scipy.spatial.transform.Rotation objects.
来存储它们
我注意到有两个选项可用。
我在一个数组中存储了大量的 Rotation 对象,每个 Rotation 对象包含我序列的一个旋转。
我将每个旋转都存储在同一个 Rotation 对象中,有效地将它们堆叠在一个对象中。
我想知道这些方法在计算速度和数据访问速度方面的权衡是什么。最终应该首选哪种方法。
以我为例:
- 我有相当多的旋转(大约 2'000'000)。
- 我想尽可能加快我的数据访问速度。
- 我不关心内存使用,所以我愿意用 space 换取速度。
- 我不打算将轮换应用于任何事情。这纯粹是为了存储使用。
- 我将不得不以四元数 (.as_quat()) 和欧拉角 (.as_euler())
的形式访问我的旋转
- 我将不得不在某个时候将我的数据拆分成更小的块(而且我知道如果我使用单个 Rotation 对象,我可能必须在每个块上重新创建才能正确拆分我的数据)
我在找什么:
- 访问时间最快的方法
- 更接近python
中的良好实践和编码约定的方法
提前致谢。
好吧,我会把我拥有的第一个元素放进去。
对于两者,您最终会访问一个可迭代对象和一个对象(只是顺序不同)。因此访问速度应该没有什么大的区别。
R的列表以后更容易访问和操作。因此,如果您易于更改轮换顺序中的任何内容,这是更简单的方法。使用单个对象需要一些 extra-code 进行操作,并且可能会更慢。
但是这真的取决于你做什么,我没有数据证明它明显更慢。
单个对象 应该占用更少的内存space 因为只有一个实例,而对象列表有nb_rotation 倍。
我已经提到这在我的案例中并不重要,它并不重要。同样,我没有任何数据来支持这一点,但我预计差异会很大,因为我有大约 2'000'000 次旋转。
根据这些事实,我将做出如下决定:
如果您只想使用对象进行存储,那么单个对象可能更有效。 (但是这适用于非常具体的情况,因为您还可以计算结果旋转并存储单个四元数或旋转对象)
如果您希望以任何方式操作您的数据,那么对象列表似乎更适合。唯一真正的缺点是内存使用,但是如果您操作数据,您还必须在某个时候解压缩单个对象,导致类似的问题,如果不是由于数据重复而更糟的话。
在我的例子中,我将使用对象列表。
在一个项目中,我必须在 python 中存储对象的一系列连续旋转。我打算使用 scipy.spatial.transform.Rotation objects.
来存储它们我注意到有两个选项可用。
我在一个数组中存储了大量的 Rotation 对象,每个 Rotation 对象包含我序列的一个旋转。
我将每个旋转都存储在同一个 Rotation 对象中,有效地将它们堆叠在一个对象中。
我想知道这些方法在计算速度和数据访问速度方面的权衡是什么。最终应该首选哪种方法。
以我为例:
- 我有相当多的旋转(大约 2'000'000)。
- 我想尽可能加快我的数据访问速度。
- 我不关心内存使用,所以我愿意用 space 换取速度。
- 我不打算将轮换应用于任何事情。这纯粹是为了存储使用。
- 我将不得不以四元数 (.as_quat()) 和欧拉角 (.as_euler()) 的形式访问我的旋转
- 我将不得不在某个时候将我的数据拆分成更小的块(而且我知道如果我使用单个 Rotation 对象,我可能必须在每个块上重新创建才能正确拆分我的数据)
我在找什么:
- 访问时间最快的方法
- 更接近python 中的良好实践和编码约定的方法
提前致谢。
好吧,我会把我拥有的第一个元素放进去。
对于两者,您最终会访问一个可迭代对象和一个对象(只是顺序不同)。因此访问速度应该没有什么大的区别。
R的列表以后更容易访问和操作。因此,如果您易于更改轮换顺序中的任何内容,这是更简单的方法。使用单个对象需要一些 extra-code 进行操作,并且可能会更慢。 但是这真的取决于你做什么,我没有数据证明它明显更慢。
单个对象 应该占用更少的内存space 因为只有一个实例,而对象列表有nb_rotation 倍。 我已经提到这在我的案例中并不重要,它并不重要。同样,我没有任何数据来支持这一点,但我预计差异会很大,因为我有大约 2'000'000 次旋转。
根据这些事实,我将做出如下决定:
如果您只想使用对象进行存储,那么单个对象可能更有效。 (但是这适用于非常具体的情况,因为您还可以计算结果旋转并存储单个四元数或旋转对象)
如果您希望以任何方式操作您的数据,那么对象列表似乎更适合。唯一真正的缺点是内存使用,但是如果您操作数据,您还必须在某个时候解压缩单个对象,导致类似的问题,如果不是由于数据重复而更糟的话。
在我的例子中,我将使用对象列表。