如何使用包装来移动整个numpy数组

时间:2018-11-26 06:32:19

标签: python numpy

不确定如何最好地称呼此问题,但基本上我想基于现有数组生成一个新的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]]

1 个答案:

答案 0 :(得分:6)

使用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)

显然可以做更多的“漂亮” ;-)
祝你好运!