numpy进行行(列)交换非常简便,因为numpy的下标访问是基于视图机制的,对子视图重新赋值即可。
a = np.arange(12).reshape(3, 4)
print(a)
a[[0, 2]] = a[[2, 0]]
a
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
array([[ 8, 9, 10, 11],
[ 4, 5, 6, 7],
[ 0, 1, 2, 3]])
利用这个机制也可以对array重新排列,例如下面的代码就是将2*2的array按第一列值排序。
a = np.arange(12).reshape(3, 4)
print(a)
top = np.argsort(a[:, 0], axis=0).tolist()
top.reverse()
a = a[top]
a
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
array([[ 8, 9, 10, 11],
[ 4, 5, 6, 7],
[ 0, 1, 2, 3]])