【问题标题】:How do you rotate the numbers in an numpy array of shape (n,) or (n,1)?如何旋转形状为 (n,) 或 (n,1) 的 numpy 数组中的数字?
【发布时间】: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.ndim1;但对于形状 (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)

标签: python numpy


【解决方案1】:

只需使用numpy.roll 函数:

a = np.array([0,1,2,3,4])
b = np.roll(a,1)
print(b)
>>> [4 0 1 2 3]

另见this question

【讨论】:

    【解决方案2】:
    numpy.concatenate([a[-1:], a[:-1]])
    >>> array([4, 0, 1, 2, 3])
    

    【讨论】:

      【解决方案3】:

      试试这个

      b = a[-1:]+a[:-1]
      

      【讨论】:

      • 谢谢。请注意,我使用的是 numpy 数组,因此您必须先转换为列表...b=list(a)[-1:]+list(a)[:-1]
      • ... 我想要一个 numpy 数组,所以 b=np.array(list(a)[-1:]+list(a)[:-1])
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2013-06-04
      • 2019-08-21
      相关资源
      最近更新 更多