Numpy 中排序统计函数(argsort,bincount)

1. argsort,argmax与argmin.

sort就是排序,argsort就是返回排序前数字的索引。
argmax与argmin.:一个返回最大值的索引,一个返回最小值的索引。

import numpy as np

c = np.array([1,2,5,9,3])

print('输出排序结果:',np.sort(c))
print('输出排序前索引:',np.argsort(c))
'''
输出排序结果: [1 2 3 5 9]
输出排序前索引: [0 1 4 2 3]

显然:[1 2 3 5 9]中 1的索引是0,
					2的索引是1,
					3的索引是4,
					5的索引是2,
					9的索引是3
'''

==========================================================
print('输出最大值索引:',np.argmax(c))
print('输出最小值索引:',np.argmin(c))

输出最大值索引: 3
输出最小值索引: 0

二维(多维)数组排序

import numpy as np


data = np.array([[11, 265, 5, 34, 53],
                 [51, 20, 4, 2, 31],
                 [13, 24, 3, 94, 6]])

print('按照第3列对行排序:\n',data[data[:,2].argsort()])

print('按照第3行对列排序:\n',data.T[data.T[:,2].argsort()].T)
print('按照第3行对列排序:\n',data[:,data[2].argsort()])

'''输出如下:
按照第3列对行排序:
 [[ 13  24   3  94   6]
 [ 51  20   4   2  31]
 [ 11 265   5  34  53]]
 
按照第3行对列排序(后面两个效果一样):
 [[  5  53  11 265  34]
 [  4  31  51  20   2]
 [  3   6  13  24  94]]
'''
import numpy as np

a = np.array([[2, 17,  4, 6],
              [35, 9,  1, 5],
              [22, 12, 3, 2]])


print('按最后一列顺序排序:\n',a[np.lexsort(a.T)])
print('按最后一列逆序排序:\n',a[np.lexsort(-a.T)])
print('按第一列顺序排序:\n',a[np.lexsort(a[:, ::-1].T)])

print('按最后一行顺序排序:\n',a.T[np.lexsort(a)].T)
print('按第一行顺序排序:\n',a.T[np.lexsort(a[::-1, :])].T)

'''
按最后一列顺序排序:
 [[22 12  3  2]
 [35  9  1  5]
 [ 2 17  4  6]]
 
按最后一列逆序排序:
 [[ 2 17  4  6]
 [35  9  1  5]
 [22 12  3  2]]
 
按第一列顺序排序:
 [[ 2 17  4  6]
 [22 12  3  2]
 [35  9  1  5]]
 
按最后一行顺序排序:
 [[ 6  4 17  2]
 [ 5  1  9 35]
 [ 2  3 12 22]]
 
按第一行顺序排序:
 [[ 2  4  6 17]
 [35  1  5  9]
 [22  3  2 12]]
'''
2.bincount

用于求numpy中求array出现次数最多的元素及其索引,
与列表list.count(a)统计a在列表中出现的次数很像,但又不同。来看例子:

import numpy as np

array1 = np.array([1,2,2,5,9,9,9,3,7])
print('输出等距排序后的元素出现次数:',np.bincount(array1))

'''
输出等距排序后的元素出现次数: [0 1 2 1 0 1 0 1 0 3]

分析:它返回的array中0–max等距出现的次数:
	依次是 0 出现次数:0
		  1 出现次数:1
		  2 出现次数:2
		  3 出现次数:1
		  ...
	      8 出现次数:0
	      9 出现次数:3
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值