信不信由你,在分析了我当前的代码之后,numpy 数组反转的重复操作占用了运行时间的一大块。我现在拥有的是常见的基于 View 的方法:
reversed_arr = arr[::-1]
有没有其他方法可以更有效地做到这一点,或者这只是我痴迷于不切实际的 numpy 性能的一种错觉?
最佳答案
reversed_arr = arr[::-1]
给出一个相反的view到原始数组 arr
中。对原始数组 arr
所做的任何更改也将立即在 reversed_arr
中可见。 arr
和 reversed_arr
的底层数据缓冲区是 shared,因此创建此 View 始终是即时的,不需要任何额外的内存分配或复制用于数组内容。
另请参阅有关 NumPy View 的讨论:How do I create a view onto a NumPy array?
View 性能问题的可能解决方案
您重新创建 View 的频率是否超出了您的需要?您应该能够执行以下操作:
arr = np.array(some_sequence)
reversed_arr = arr[::-1]
do_something(arr)
look_at(reversed_arr)
do_something_else(arr)
look_at(reversed_arr)
我不是 numpy 专家,但这似乎是在 numpy 中做事的最快方法。如果这是您已经在做的事情,我认为您无法改进。
关于python - 反转numpy数组的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771428/