【发布时间】:2020-07-27 00:44:38
【问题描述】:
假设我有一个这样的数组:
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我想向左或向右移动给定范围的项目。例如,从位置 4 开始向右移动 3 个位置:
>>> shift(arr, 4, 3)
arr = [0, 1, 2, 3, 4, 5, 6, 4, 5, 6, 7]
或从位置 4 开始移动,但向左移动:
>>> shift(arr, 4, -3)
arr = [0, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7]
我将原始项目留在原处,但不管是什么留在该范围项目所在的原始位置。可能是零或其他任何东西 - 无论如何我都会覆盖它。
我对 NumPy 很陌生,但我认为可能有一些切片语法可以用 NumPy 完成此任务,但我无法想出如何完成此任务。
另一种方法是循环并逐个复制项目,但我希望有一种更有效/更优雅的方式来做到这一点。
感谢任何帮助!
【问题讨论】:
-
元素移出数组边界会怎样?
-
是的,您可以为此使用基本切片,它只是在 C 代码中执行“替代”循环。您必须做一些数学运算才能弄清楚您正在使用哪些索引来编写以及您想要覆盖哪些索引,并且在这种情况下它们必须具有相同的长度。一般来说,将一个数组分配给另一个数组的基本切片需要兼容的广播形状(看看这个,它真的很有帮助)。
-
@Marat 它不会 - 我正在操作一个保证足够大以适应转变的大型阵列。
标签: python arrays numpy python-3.7