【发布时间】:2013-04-12 11:03:28
【问题描述】:
假设我有一个 numpy 数组:
>>> a
array([0,1,2,3,4])
我想“旋转”它以获得:
>>> b
array([4,0,1,2,3])
最好的方法是什么?
我一直在转换为双端队列并返回(见下文),但有更好的方法吗?
b = deque(a)
b.rotate(1)
b = np.array(b)
【问题讨论】:
-
只是为了迂腐,
a.shape是(n,)不是(n,1) -
@askewchan,我认为 (n,) 和 (n,1) 数组 look the same。我错了吗?
-
您是对的,它们看起来相同,甚至在许多情况下表现相同,包括
roll函数,但在ndim可能很重要的某些情况下要小心(对于 @987654330 @ 是(n,),a.ndim是1;但对于形状(n,1),a.ndim是 2)。从链接到的问题中可以看出,必须添加一个轴才能从 1d 到 2d 案例。 -
公平点。事后看来,为了与问题标题保持一致,我应该将具有 (n,1) 形状的
a显示为array([[0],[1],[2],[3],[4]])。但是,每个答案都适用于 (n,) 和 (n,1) 形状。 -
是的,如果只有一个,
roll将有效地沿非 1 轴应用,这就是为什么我的评论只是迂腐:)。但是,如果您的数组是(n,m)(或更高),它将沿所有轴(扁平数组)滚动,这可能会产生意想不到的结果。解决方案就是做np.roll(a, axis=0)