【问题标题】:How to flip half of a numpy array如何翻转一个numpy数组的一半
【发布时间】:2021-03-15 14:18:11
【问题描述】:

我有一个 numpy 数组:

arr=np.array([[1., 2., 0.],
               [2., 4., 1.],
               [1., 3., 2.],
               [-1., -2., 4.],
               [-1., -2., 5.],
               [1., 2., 6.]])

我想将这个数组的后半部分向上翻转。我的意思是我想要:

flipped_arr=np.array([[-1., -2., 4.],
                      [-1., -2., 5.],
                      [1., 2., 6.],
                      [1., 2., 0.],
                      [2., 4., 1.],
                      [1., 3., 2.]])

当我尝试这段代码时:

fliped_arr=np.flip(arr, 0)

它给了我:

fliped_arr= array([[1., 2., 6.],
                   [-1., -2., 5.],
                   [-1., -2., 4.],
                   [1., 3., 2.],
                   [2., 4., 1.],
                   [1., 2., 0.]])

在此先感谢您的帮助。

【问题讨论】:

  • 当数组中的行数为奇数时,预期的行为是什么?
  • @Kalpit,感谢您的提示。然后我想说从那行到最后,将具有相同顺序的行向上移动。那么第 n 行将是第一行。

标签: python numpy flip


【解决方案1】:

您可以简单地将nth 行(包括)下方的行与np.r_ 连接起来,例如,您选择的行索引n 在顶部,其他在底部:

import numpy as np
n = 3

arr_flip_n = np.r_[arr[n:],arr[:n]]

>>> array([[-1., -2.,  4.],
           [-1., -2.,  5.],
           [ 1.,  2.,  6.],
           [ 1.,  2.,  0.],
           [ 2.,  4.,  1.],
           [ 1.,  3.,  2.]])

【讨论】:

    【解决方案2】:

    您可以通过使用中点对数组进行切片来做到这一点:

    ans = np.vstack((arr[int(arr.shape[0]/2):], arr[:int(arr.shape[0]/2)]))
    

    稍微分解一下:

    找到arr的中点,通过找到它的形状,第一个索引是行数,除以二并转换为整数:

    midpoint = int(arr.shape[0]/2)
    

    然后可以像这样对数组的两半进行切片:

    a = arr[:midpoint]
    b = arr[midpoint:]
    

    然后使用 np.vstack 将它们堆叠在一起:

    ans = np.vstack((a, b))
    

    (注意 vstack 接受一个参数,它是一个包含 a 和 b 的元组:(a, b)

    【讨论】:

    • 嗨@Finley,这与我的回答有何不同?
    • 似乎不是。发帖时你的不在。 (出现在发布 asnwer 的刷新时)
    【解决方案3】:

    您可以使用数组切片和 vstack 来做到这一点 -

    arr=np.array([[1., 2., 0.],
                   [2., 4., 1.],
                   [1., 3., 2.],
                   [-1., -2., 4.],
                   [-1., -2., 5.],
                   [1., 2., 6.]])
    
    mid = arr.shape[0]//2  
    np.vstack([arr[mid:],arr[:mid]])
    
    array([[-1., -2.,  4.],
           [-1., -2.,  5.],
           [ 1.,  2.,  6.],
           [ 1.,  2.,  0.],
           [ 2.,  4.,  1.],
           [ 1.,  3.,  2.]])
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2020-08-18
      • 2014-06-28
      • 1970-01-01
      相关资源
      最近更新 更多