Python NumPy 移位数组

Muhammad Maisam Abbas 2023年1月30日 2021年7月4日
  1. 使用 np.roll() 方法的 NumPy 移位数组
  2. NumPy Shift Array 与 Python 中的切片方法
  3. Python 中 scipy.ndimage.interpolation 库中带有 shift() 函数的 NumPy 移位数组
Python NumPy 移位数组

本教程将介绍移动 NumPy 数组的方法。

使用 np.roll() 方法的 NumPy 移位数组

如果我们想右移或左移 NumPy 数组的元素,我们可以使用 Python 中的 numpy.roll() 方法numpy.roll() 方法用于沿指定轴滚动数组元素。它接受数组和我们想要移动数组元素的位置数,并返回移动后的数组。如果我们想向右移动元素,我们必须使用一个正整数作为移动值。如果我们想向左移动元素,我们必须指定一个负的移动值。以下代码示例显示了如何使用 numpy.roll() 方法移动数组的元素。

import numpy as np

array = np.array([1,2,3,4,5])

array_new = np.roll(array, 3)
print(array_new)

输出:

[3 4 5 1 2]

我们首先使用 np.array() 函数创建了数组。然后我们使用 np.roll() 函数将元素向右移动,并将结果数组存储在 array_new 中。

NumPy Shift Array 与 Python 中的切片方法

如果我们想向右或向左移动元素并将移动的索引替换为常量值,我们必须使用 Python 中的数组切片方法。我们可以像原始数组一样创建一个新的空数组。如果移位值为正,我们用常量值填充数组的左侧,如果移位值为负,我们用常量值填充数组的右侧。然后我们可以用原始数组中的值填充新数组的剩余索引。下面的代码示例演示如何使用数组切片方法移动数组的元素。

import numpy as np
array = np.array([1,2,3,4,5])
num = -3
fill_value = 0

def shift(arr, num, fill_value):
    result = np.empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr
    print(result)
shift(array, num, fill_value)

输出:

[4 5 0 0 0]

我们定义了函数 shift(),它使用上面代码中的数组切片方法将数组的元素向左移动三位。我们首先使用 np.array() 方法创建了原始数组。然后我们指定了我们想要移动数组元素的索引数量 num 和我们想要替换所有移动索引的常量值 fill_value。最后,我们将这些值传递给 shift() 函数,该函数使用 np.empty_like(arr) 函数创建一个新数组 result,就像我们的原始数组一样,存储移位的元素,并打印移位的数组。

Python 中 scipy.ndimage.interpolation 库中带有 shift() 函数的 NumPy 移位数组

scipy.ndimage.interpolation 库中的 shift() 方法 用于使用 Python 中的样条插值方法移动数组。与 numpy.roll() 方法不同,shift() 方法可以移动数组并同时用指定的常量值替换移动的索引。shift() 函数将原始数组、我们想要移动的索引数量以及我们想要用移动索引替换的常量值作为输入参数,并返回移动后的数组,其中每个移动的索引都被替换为指定的恒定值。下面的代码示例向我们展示了如何使用 shift() 函数移动数组的元素。

import numpy as np
from scipy.ndimage.interpolation import shift

array = np.array([ 1,2,3,4,5])

result = shift(array, 3, cval=0)
print(result)

输出:

[0 0 0 1 2]

我们将 array 的元素向右移动了三个位置,并使用上面代码中的 shift() 函数用 0 替换了移动的索引。我们首先使用 np.array() 函数创建了我们的数组。然后我们使用 shift 函数将 array 向右移动 3 个位置,并用常量值 0 替换原始数组的前三个索引。我们将 shift() 函数的输出存储在 result 数组中。最后,我们将值打印在 result 数组中。

所有这些方法都可以正常工作。如果我们只想移动数组内的值,而不想用常量值替换移动的索引,我们应该使用 numpy.roll() 函数。另一方面,如果我们想用特定的常量值替换移位的索引,则数组切片方法是此操作的最快方法。数组切片方法更快,但比使用 scipy 库中的 shift() 函数要复杂一些。如果我们不关心代码的性能,我们可以使用 shift() 函数来完成这个任务。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相关文章 - NumPy Array