numpy数组旋转、排序操作笔记

numpy array 数组旋转、排序操作笔记

平时对于数组的旋转、排序常常会用到,但是网上找了一圈都是碎片式的,把相关的操作汇总一下,方便使用。

数转旋转

生成

import numpy as np
size = (3,5)
D = np.arange(size[0]*size[1]).reshape(size)

运行结果:

>>> size = (3,5)

>>> D = np.arange(size[0]*size[1]).reshape(size)

>>> print(D)

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
>>> 

按列反转:上下翻转
D[::-1]

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D[::-1]

array([[10, 11, 12, 13, 14],
       [ 5,  6,  7,  8,  9],
       [ 0,  1,  2,  3,  4]])

按行反转:左右翻转
左右翻转也就是沿Y轴对称;
D[:,::-1]

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D[:,::-1]
	       
array([[ 4,  3,  2,  1,  0],
       [ 9,  8,  7,  6,  5],
       [14, 13, 12, 11, 10]])

转置:行列互换
D.T

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D.T
	       
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

以下是组合应用
顺时针旋转九十度
D[::-1].T

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D[::-1].T

array([[10,  5,  0],
       [11,  6,  1],
       [12,  7,  2],
       [13,  8,  3],
       [14,  9,  4]])

逆时针旋转九十度
D[:,::-1].T

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D[:,::-1].T
	       
array([[ 4,  9, 14],
       [ 3,  8, 13],
       [ 2,  7, 12],
       [ 1,  6, 11],
       [ 0,  5, 10]])

旋转180度
D[::-1][:,::-1]

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D[::-1][:,::-1]
	       
array([[14, 13, 12, 11, 10],
       [ 9,  8,  7,  6,  5],
       [ 4,  3,  2,  1,  0]])

沿/方向对称翻转
D[::-1][:,::-1].T

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D[::-1][:,::-1].T
	       
array([[14,  9,  4],
       [13,  8,  3],
       [12,  7,  2],
       [11,  6,  1],
       [10,  5,  0]])

** 沿\方向对称翻转 **
D[:,::-1][::-1].T

>>> D
	       
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> D[:,::-1][::-1].T
	       
array([[14,  9,  4],
       [13,  8,  3],
       [12,  7,  2],
       [11,  6,  1],
       [10,  5,  0]])

数组排序

生成随机数组
D = np.random.random (size)

>>> D = np.random.random (size)
	       
>>> D
	       
array([[0.02156847, 0.84666417, 0.40878565, 0.7753874 , 0.92004559],
       [0.92827944, 0.37388593, 0.79962878, 0.67969317, 0.55302909],
       [0.12713696, 0.88070786, 0.21681744, 0.47167429, 0.48588948]])

按行升序
np.sort (D)
或者直接在D上排序:
D.sort()

>>> np.sort (D)
	       
array([[0.02156847, 0.40878565, 0.7753874 , 0.84666417, 0.92004559],
       [0.37388593, 0.55302909, 0.67969317, 0.79962878, 0.92827944],
       [0.12713696, 0.21681744, 0.47167429, 0.48588948, 0.88070786]])

** 按行降序 **

np.sort (D)[:,::-1]
或者更简洁的:
np.sort (-D)

>>> np.sort (D)[:,::-1]
	       
array([[0.92004559, 0.84666417, 0.7753874 , 0.40878565, 0.02156847],
       [0.92827944, 0.79962878, 0.67969317, 0.55302909, 0.37388593],
       [0.88070786, 0.48588948, 0.47167429, 0.21681744, 0.12713696]])

** 获得排序的结果 **

np.argsort(D)

>>> np.argsort(D)
	       
array([[1, 4, 2, 3, 0],
       [1, 3, 0, 2, 4],
       [1, 4, 3, 0, 2]], dtype=int64)

** 把排序结果应用到另一个数组上 **

这种情况常常中于两个数组,一个数组按另一个数组的排序结果进行排序,
例如一个数组I存的是索引号,另一个数组D存的是得分值,
需要让索引号数组I按得分数组D进行排序。

size = (3,5)
D = np.random.random (size)
# 生成一个新的数组I
I = (np.random.random (size)*100).astype(int)

# 按行降序排序
index = np.argsort(-D)
# 构造一个索引
r = np.arange(D.shape[0])[:,None]
# 对I进行排序
I = I[r,index]

运行过程如下:

>>> D = np.random.random (size)
>>> D
	       
array([[0.02156847, 0.84666417, 0.40878565, 0.7753874 , 0.92004559],
       [0.92827944, 0.37388593, 0.79962878, 0.67969317, 0.55302909],
       [0.12713696, 0.88070786, 0.21681744, 0.47167429, 0.48588948]])

>>> I = (np.random.random (size)*100).astype(int)
	       
>>> I
	       
array([[91, 12,  8, 60, 76],
       [35, 43, 84, 53, 55],
       [ 2, 32, 36, 82,  7]])
>>> index = np.argsort(-D)
	       
>>> index
	       
array([[4, 1, 3, 2, 0],
       [0, 2, 3, 4, 1],
       [1, 4, 3, 2, 0]], dtype=int64)
>>> r = np.arange(D.shape[0])[:,None]
	       
>>> r
	       
array([[0],
       [1],
       [2]])
>>> I = I[r,index]
	       
>>> I
	       
array([[76, 12, 60,  8, 91],
       [35, 84, 53, 55, 43],
       [32,  7, 82, 36,  2]])
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值