Python 在NumPy数组中重新排列值
假设我有一个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
[[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