簡體   English   中英

如何翻轉 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.]])

您可以通過使用中點對數組進行切片來做到這一點:

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

把它分解一下:

找到 arr 的中點,通過找到它的形狀,第一個索引是行數,除以 2 並轉換為 integer:

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

然后可以像這樣切片數組的兩半:

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

然后使用np.vstack將它們堆疊在一起:

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

(注意 vstack 接受一個參數,它是一個包含 a 和 b 的元組: (a, b)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM