如何翻转 numpy 数组的一半

How to flip half of a numpy array

我有一个 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.]])

提前,我非常感谢任何帮助。

您可以简单地将第 n 行(包括)下方的行与 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.]])

您可以使用数组切片和 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.]])

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

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)