不知道如何最好地标题这个问题,但基本上我想生成一个基于现有数组的新numpy数组.唯一的区别是值已经转移到我指定的索引.还假设需要包装.
为简单起见,请考虑基本数组:
[[0,1,2],
[3,4,5],
[6,7,8]]
如果我想将基数组中的零(0)或第一个元素移位到(0,1),它将是:
[[2,0,1],
[5,3,4],
[8,6,7]]
如果我希望第一个元素移动到(2,2),它将是:
[[4,5,3],
[7,8,6],
[1,2,0]]
最佳答案 使用
numpy.roll.
例如,对于第一个输出,您可以向右滚动1个索引,即沿轴1:
import numpy as np
x = np.array([[0,1,2], [3,4,5], [6,7,8]])
x_shifted = np.roll(x, shift=1, axis=1)
由于可交换性,您可以滚动两次(每个维度一次)以实现双向循环置换效果:
x_double_shifted = np.roll(np.roll(x, shift=2, axis=1), shift=2, axis=0)
显然可以做得更“漂亮”;-)
祝好运!