roll()
方法会按照给定的次数移动输入数组的元素。
示例
import numpy as np
# create an array
array1 = np.array([0, 1, 2, 3, 4])
# shift elements of array1 by 3 steps
array2 = np.roll(array1, 3)
print(array2)
# Output: [2 3 4 0 1]
如果元素超出了数组的边界,它会绕回来并回到数组的开头。
roll() 语法
roll()
的语法是
numpy.roll(array, shift, axis)
roll() 参数
roll()
方法接受三个参数
array
- 要滚动其元素的数组shift
- 元素移动的步数(int
或tuple
)axis
(可选)- 要滚动/移动的轴(int
或tuple
)
roll() 返回值
roll()
方法返回已移动元素的数组。
示例 1:滚动一维数组
import numpy as np
# create an array
array1 = np.array([0, 1, 2, 3, 4])
# roll elements of array1 by 3 steps
array2 = np.roll(array1, 3)
print(array2)
# roll elements of array1 backwards by 1 step
array3 = np.roll(array1, -1)
print(array3)
输出
[2 3 4 0 1] [1 2 3 4 0]
在此,array3 以负值(-1)滚动,因此它向后移动。
示例 2:滚动二维数组
二维数组可以在两个轴上滚动。如果数组在轴 0 上滚动,它会垂直移动;如果数组在轴 1 上滚动,它会水平移动。
import numpy as np
# create an array
array1 = np.array([[0, 1, 2], [3, 4, 5]])
# roll elements of array1 by 1 step
array2 = np.roll(array1, 1)
# roll elements of array1 by 1 step on axis 0
array3 = np.roll(array1, 1, 0)
# roll elements of array1 by 1 step on axis 1
array4 = np.roll(array1, 1, 1)
# roll elements of array1 by 1 step on both axes
array5 = np.roll(array1, 1, (0, 1))
print('\nRoll one step:\n',array2)
print('\nRoll on axis 0:\n',array3)
print('\nRoll on axis 1:\n',array4)
print('\nRoll on both axes:\n',array5)
输出
Roll one step: [[5 0 1] [2 3 4]] Roll on axis 0: [[3 4 5] [0 1 2]] Roll on axis 1: [[2 0 1] [5 3 4]] Roll on both axes: [[5 3 4] [2 0 1]]
如果未提供 axis
,则数组会被展平、滚动,然后重塑回其原始形状。
示例 3:在两个轴上使用不同次数的移动滚动二维数组
roll()
方法允许我们通过指定每个轴的滚动次数来沿多个轴移动元素。
我们可以对数组的不同轴应用不同的滚动操作。
import numpy as np
array1 = np.array(
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
# roll elements by variable amounts
shift = (1, 2)
# uneven rolling of the elements
rolledArray1 = np.roll(array1, shift)
# uneven rolling of the elements with axis provided
rolledArray2 = np.roll(array1, shift, (1,0))
print('Default roll:\n',rolledArray1)
print('Roll with (1,0) axes:\n',rolledArray2)
输出
Default roll: [[6 7 8] [0 1 2] [3 4 5]] Roll with (0,1) axes: [[6 7 8] [0 1 2] [3 4 5]]
默认的 axis
是 (0, 1)
。使用 (1, 2)
的移动,数组将在轴-0 上移动 1 步,在轴-1 上移动 2 步。