[英]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.