1.排序
NumPy的排序方法有直接排序和间接排序。直接排序是对数据直接进行排序,间接排序是指根据一个或多个键值对数据集进行排序。直接排序使用 sort()函数,间接排序使用 argsort函数和lexsort函数。
sort函数是常用的排序方法,函数调用改变原始数组,无返回值。
格式:numpy.sort(a, axis, kind, order)
参数:
a : 要排序的数组
axis: 使得sort函数可以沿着指定轴对数据集进行排序。axis=1 为沿横轴排序,axis=0为沿纵轴排序,axis=None将数组平坦化后进行排序。
kind: 排序算法,默认 quicksort
order: 如果数组包含字段,则是要排序的字段
a = np.array([7, 9, 5, 2, 9, 4, 3, 1, 4, 3])
print(‘原数组:’, a)
a.sort()
print("排序后: ", a)
输出:
原数组: [7 9 5 2 9 4 3 1 4 3]
排序后: [1 2 3 3 4 4 5 7 9 9]
带参数轴的排序
a = np.array([[4, 2, 9, 5], [6, 4, 8, 3], [1, 6, 2, 4]])
print(“原数组:”, a)
a.sort(axis=1)
print("排序后: ", a)
输出:
原数组: [[4 2 9 5]
[6 4 8 3]
[1 6 2 4]]
排序后: [[2 4 5 9]
[3 4 6 8]
[1 2 4 6]]
使用argsort, lexsort函数,可以在给定一个或多个键时,得到一个由整数构成的索引数组,索引值表示数据在新序列中的位置。
a = np.array([7, 9, 5, 2, 8, 4, 3, 1, 4, 3])
print(“原数组:”, a)
print("排序后: ", a.argsort())
# 返回数组下标排序
print(‘显示较大的5个数:’, a[a.argsort()][-5:])
输出:
原数组: [7 9 5 2 8 4 3 1 4 3]
排序后: [7 3 6 9 5 8 2 0 4 1]
显示较大的5个数: [4 5 7 8 9]
a = [1, 5, 7, 2, 3, -2, 4]
b = [9, 5, 2, 0, 6, 8, 7]
ind = np.lexsort((b, a))
print(‘ind’, ind)
tmp = [(a[i], b[i])for iin ind]
print(‘tmp’, tmp)
输出:
ind [5 0 3 4 6 1 2]
tmp [(-2, 8), (1, 9), (2, 0), (3, 6), (4, 7), (5, 5), (7, 2)]
2.重复数据与去重
在统计分析中,需要提前将重复数据剔除。可以使用unique函数找到数组中唯一值并返回已排序的结果。参数return_counts设置为True时,可返回每个取值出现的次数。
数组内数据去重
names = np.array([‘红色’, ‘蓝色’, ‘蓝色’, ‘白色’, ‘红色’, ‘红色’, ‘蓝色’])
print(‘原数组:’, names)
print(‘去重后的数组:’, np.unique(names))
print(‘数据出现次数:’, np.unique(names, return_counts=True))
输出:
原数组: [‘红色’ ‘蓝色’ ‘蓝色’ ‘白色’ ‘红色’ ‘红色’ ‘蓝色’]
去重后的数组: [‘白色’ ‘红色’ ‘蓝色’]
数据出现次数: (array([‘白色’, ‘红色’, ‘蓝色’], dtype=’<U2’), array([1, 3, 3], dtype=int64))
统计分析时需要把一个数据重复若干次,在NumPy中主要使用tile, repeat函数实现重复数据
numpy.tile(A, reps)
a = np.arange(5)
print(‘原数组:’, a)
w = np.tile(a, 3)
print(“重复数据:”, w)
输出:
原数组: [0 1 2 3 4]
重复数据: [0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
numpy.repeat(a, reps, axis=None)
参数:a 是需要重复的数组元素,reps是重复次数, axis只沿着那个轴进行,0 按进行元素重复, 1表按列元素进行重复
a = np.arange(5)
print(‘原数组:’, a)
w = np.tile(a, 3)
print(‘重复数据处理:\n’, w)
a2 = np.array([[1, 2, 3], [4, 5, 6]])
print(‘重复数据处理1:\n’, a2.repeat(2, axis=0))
print(‘重复数据处理2:\n’, a2.repeat(2, axis=1))
输出:
原数组: [0 1 2 3 4]
重复数据处理:
[0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
重复数据处理1:
[[1 2 3]
[1 2 3]
[4 5 6]
[4 5 6]]
重复数据处理2:
[[1 1 2 2 3 3]
[4 4 5 5 6 6]]
3.常用统计函数
常见有sum, mean, std, var, min, max, 几乎所有的统计函数在针对2维数组时需要注意轴的概念。
axis参数0时,表示沿纵轴,1表示沿横轴
a = np.arange(20).reshape(4, 5)
print(‘创建的数组:\n’, a)
print(‘数组的和:’, np.sum(a))
print('数组纵轴的和: ', np.sum(a, axis=0))
print('数组横轴的和: ', np.sum(a, axis=1))
print('数组的均值: ', np.mean(a))
print('数组纵轴的均值: ', np.mean(a, axis=0))
print('数组横轴的均值 ', np.mean(a, axis=1))
print('数组的标准差: ', np.std(a))
print('数组纵轴的标准差: ', np.std(a, axis=0))
print('数组横轴的标准差: ', np.std(a, axis=1))
输出:
创建的数组:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
数组的和: 190
数组纵轴的和: [30 34 38 42 46]
数组横轴的和: [10 35 60 85]
数组的均值: 9.5
数组纵轴的均值: [ 7.5 8.5 9.5 10.5 11.5]
数组横轴的均值 [ 2. 7. 12. 17.]
数组的标准差: 5.766281297335398
数组纵轴的标准差: [5.59016994 5.59016994 5.59016994 5.59016994 5.59016994]
数组横轴的标准差: [1.41421356 1.41421356 1.41421356 1.41421356]
NumPy的基础主要包含数组及其索引,数组运算,数组读写以及常用的统计与分析方法。