如何将二维数组的特定部分从左到右向上或向下移动?

how to move specific part of a 2d array to either left right up or down?

我知道您可以使用 NumPy 移动数组,因此如果您使用 np.roll,您可以将数组向右或向左移动。我想知道如何将数组中的一组特定值从左到右向上或向下移动。

例如

如果我想将红色圆圈中的内容向左移动,我怎么才能只移动它而不是其他内容?

numpy 可以使用 slice 获取子数组,然后在不同的地方分配它

import numpy as np

x = [
  [0, 1, 2, 1, 0, 0, 1, 2, 1, 0 ],
  [0, 1, 2, 1, 0, 0, 1, 2, 1, 0 ]
]

arr = np.array(x)

print(arr)

subarr = arr[0:2,1:4]  # get values
print(subarr)

arr[0:2,0:3] = subarr  # put in new place

print(arr)

结果:

[[0 1 2 1 0 0 1 2 1 0]
 [0 1 2 1 0 0 1 2 1 0]]

[[1 2 1]
 [1 2 1]]

[[1 2 1 1 0 0 1 2 1 0]
 [1 2 1 1 0 0 1 2 1 0]]

它在 [0][1][1][1] 中保留原始值。如果你想删除它们,那么你可以复制子数组,在原来的地方设置 zero,然后把副本放在新的地方

import numpy as np

x = [
  [0, 1, 2, 1, 0, 0, 1, 2, 1, 0 ],
  [0, 1, 2, 1, 0, 0, 1, 2, 1, 0 ]
]

arr = np.array(x)

print(arr)

subarr = arr[0:2,1:4].copy()  # duplicate values
print(subarr)

arr[0:2,1:4] = 0  # remove original values

arr[0:2,0:3] = subarr  # put in new place

print(arr)

结果

[[0 1 2 1 0 0 1 2 1 0]
 [0 1 2 1 0 0 1 2 1 0]]

[[1 2 1]
 [1 2 1]]

[[1 2 1 0 0 0 1 2 1 0]
 [1 2 1 0 0 0 1 2 1 0]]