如何移动 numpy 数组中的元素(带有示例)
您可以使用以下方法之一来偏移 NumPy 数组的元素:
方法一:移位元素(保留所有原始元素)
#shift each element two positions to the right data_new = np. roll (data, 2)
方法二:Shift elements(允许元素被替换)
#define shifting function
def shift_elements (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
return result
#shift each element two positions to the right (replace shifted elements with zero)
data_new = shift_elements(data, 2, 0)
以下示例展示了如何在实践中使用每种方法。
方法一:移位元素(保留所有原始元素)
以下代码演示如何使用np.roll()函数将 NumPy 数组的每个元素向右移动两个位置:
import numpy as np #create NumPy array data = np. array ([1, 2, 3, 4, 5, 6]) #shift each element two positions to the right data_new = np. roll (data, 2) #view new NumPy array data_new array([5, 6, 1, 2, 3, 4])
请注意,每个元素已向右移动两个位置,并且数组末尾的元素只是向前移动。
我们还可以在np.roll()函数中使用负数将元素向左移动:
import numpy as np #create NumPy array data = np. array ([1, 2, 3, 4, 5, 6]) #shift each element three positions to the left data_new = np. roll (data, -3) #view new NumPy array data_new array([4, 5, 6, 1, 2, 3])
方法二:Shift elements(允许元素被替换)
我们还可以定义一个自定义函数来移动 NumPy 数组的元素,并允许移动的元素被某个值替换。
例如,我们可以定义以下函数来对元素进行移位,并将所有移位后的元素替换为值 0:
import numpy as np
#create NumPy array
data = np. array ([1, 2, 3, 4, 5, 6])
#define custom function to shift elements
def shift_elements (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
return result
#shift each element two positions to the right and replace shifted values with zero
data_new = shift_elements(data, 2, 0)
#view new NumPy array
data_new
array([0, 0, 1, 2, 3, 4])
我们还可以在函数中使用负数将元素向左移动:
import numpy as np
#create NumPy array
data = np. array ([1, 2, 3, 4, 5, 6])
#define custom function to shift elements
def shift_elements (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
return result
#shift each element three positions to the left and replace shifted values with 50
data_new = shift_elements(data, -3, 50)
#view new NumPy array
data_new
array([ 4, 5, 6, 50, 50, 50])
其他资源
以下教程解释了如何在 NumPy 中执行其他常见操作: