Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在NumPy数组中重新排列值_Python_Numpy - Fatal编程技术网

Python 在NumPy数组中重新排列值

Python 在NumPy数组中重新排列值,python,numpy,Python,Numpy,假设我有一个numpy数组,如下所示: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]] 我希望有一个新的numpy数组,前半部分和上面的数组完全相同,但后半部分应该从底部开始,直到到达数组的一半。我该怎么做 编辑:我需要的方法必须适用于60000个元素的数组。不是这个简单的例子 输出应如下所示: [[1, 2, 3], [4, 5, 6

假设我有一个numpy数组,如下所示:

[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9],
 [10, 11, 12]]
[[1, 2, 3],
 [4, 5, 6],
 [10, 11, 12],
 [7, 8, 9]]
我希望有一个新的numpy数组,前半部分和上面的数组完全相同,但后半部分应该从底部开始,直到到达数组的一半。我该怎么做

编辑:我需要的方法必须适用于60000个元素的数组。不是这个简单的例子

输出应如下所示:

[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9],
 [10, 11, 12]]
[[1, 2, 3],
 [4, 5, 6],
 [10, 11, 12],
 [7, 8, 9]]
使用numpy索引:

array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
array[[0,1,3,2], :]
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [10, 11, 12],
       [ 7,  8,  9]])

这可能有点粗糙,但您只需要将数组e中的第3行(index=2)替换为第4行(index=3)。'a'是用于切换第3行和第4行的占位符

for i in range(len(e)):
    if i == 2:
        a = e[i]
        e[i] = e[3]
    if i == 3:
        e[i] = a

另一种解决方案是使用赋值简单地交换行,如:

arr[2], arr[3] = arr[3], arr[2]
编辑后,这里有一个仅反转阵列下半部分的解决方案:

arr = np.array([[...],...])
arr[int(len(a)/2):] = arr[int(len(a)/2):][::-1]

[::-1]
按相反顺序返回数组的元素。因此,将其应用于原始数组的下半部分,并将此新数组分配给原始数组的下半部分,将得到一个前n/2行不变,最后n/2行按相反顺序排列的数组。

始终按请求获取数组的一半。(基于mathfux的回答)

array=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12])
sl=范围(0,len(数组)//2)
s2=反向(范围(len(数组)//2,len(数组)))
b=数组[(*sl,*s2),:]
印刷品(b)
印刷品

[[ 1  2  3]
 [ 4  5  6]
 [10 11 12]
 [ 7  8  9]]

当然,cou可以对下半年进行索引:

array=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12])
from_to=tuple(范围(len(数组)//2,len(数组)))
to_from=元组(反向(从_到))
数组[从_到,:]=数组[从_到,:]
打印(数组)

同样的结果。

但我需要在一个大的例子中使用它,这是不够的。您可以使用任何自定义数组,而不是
[0,1,3,2]
。还需要什么?
array = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
n = (int)(array.shape[0]//2) # change n accordingly
# n is the row number from which you want to start the reversal
temp = array[n:]
temp = temp[::-1]
array[n:] = temp