0
点赞
收藏
分享

微信扫一扫

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 条评论