NumPy roll()

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 - 元素移动的步数(inttuple
  • axis(可选)- 要滚动/移动的轴(inttuple

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 步

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战