【numpy条记_10】统计运算、排序和搜索

手机软件开发 2024-10-1 23:31:11 72 0 来自 中国
本日讲一下numpy中一些通例的数据统计功能,以及怎样操纵数组的排序和搜索。
这些在现实的数据分析场景经中常常用到。
统计操纵

照旧把常用的方法汇总一个表:
功能方法分析数组求和object.sum()盘算一个数组的元素之和求均匀数object.mean()盘算一个数组的元素均匀值求方差object.var()盘算一个数组的元素方差值求标准差object.std()盘算一个数组的元素方差值求极差object.ptp()盘算一个数组极大值和极小值之差求中位数np.median(a)盘算一个数组的元素中位数求最大值object.max()盘算一个数组的元素最大值求中位数object.min()盘算一个数组的元素最大值import numpy as nparr = np.arange(10)print('arr数组的和为:', arr.sum())print('arr数组的均匀值为:', arr.mean())print('arr数组的方差为:', arr.var())print('arr数组的标准差为:', arr.std())print('arr数组的极差为:', arr.ptp())print('arr数组的中位数为:', np.median(a=arr))# 运算结果:arr数组的和为: 45arr数组的均匀值为: 4.5arr数组的方差为: 8.25arr数组的标准差为: 2.8722813232690143arr数组的极差为: 9arr数组的中位数为: 4.5arr = np.arange(10).reshape((2,5))print('arr数组:\n', arr)print('arr数组每列的最大元素为:', arr.max(axis=1))print('arr数组的最小元素为:', arr.min())# 运算结果:arr数组: [[0 1 2 3 4] [5 6 7 8 9]]arr数组每列的最大元素为: [4 9]arr数组的最小元素为: 0以上的统计方法中另有一些可选参数。

如axis、dtype等通用参数,或差异统计方法特定的可选参数等,用以实现更加风雅的盘算。
由于明白起来很轻易,这里不再睁开细讲。感爱好的可以百度,或检察方法的源代码。

  • pycharm检察某个方法的源码:按住ctrl左键单击该方法。
排序操纵

重要先容两个排序方法:
np.sort(),返回排序后的数组

sort()方法有几个参数相识一下:

  • a=, 指定排序的数组
  • axis=, 指定排序的轴
  • kind=,指定排序的算法
    kind参数选择差异的算法,其速率、复杂度、稳固性等有肯定差异。从网上找了个先容,相识一下即可:
kind参数速率最坏复杂度工作空间稳固性kind='quicksort'1O(n^2)0弱kind='quicksort'2O(n*log(n)0-(n/2)强kind='quicksort'3O(n*log(n)0弱

  • order=,指定排序的字段(用于前面讲过的结构化数组)
import numpy as nparr = np.random.randint(1,50,24).reshape((3,2,4))   # 1-49,随机天生24个元素,构建(3,2,4)数组sort_arr = np.sort(a=arr, axis=2, kind='mergesort')  # 块、行稳定,按列排序print('arr数组:\n', arr)print('排序后:\n', sort_arr)# 运算结果:arr数组: [[[24 40 47 38]  [37 10 27 11]] [[ 7 17  2 26]  [24 41 42  6]] [[32 22  4 37]  [13 48  7 16]]]排序后: [[[24 38 40 47]  [10 11 27 37]] [[ 2  7 17 26]  [ 6 24 41 42]] [[ 4 22 32 37]  [ 7 13 16 48]]]np.argsort(),返回排序后的索引值

import numpy as nparr = np.random.randint(1,50,12)  # 1-49,随机天生24个元素sort_arr = np.argsort(a=arr)print('arr数组:\n', arr)print('排序后的索引:\n', sort_arr)print('根据索引查找排序后的数组为:\n', arr[sort_arr])# 运算结果:arr数组: [48 39 30 41 39 12 33  4 20 15 30 27]排序后: [ 7  5  9  8 11  2 10  6  1  4  3  0]根据索引查找排序后的数组为: [ 4 12 15 20 27 30 30 33 39 39 41 48]搜索

常用有以下搜索的方法:
功能方法查找满足条件的元素的索引坐标np.argwhere('条件')查找满足条件的元素的索引值np.where('条件')查找非零元素的索引坐标np.nonzero()查找最大元素的索引坐标np.argmax()import numpy as nparr = np.arange(12).reshape(3,4)print('arr数组:\n', arr)print('满足条件的元素坐标:\n', np.argwhere(arr > 5))   # argwhere返回索引坐标print('满足条件的元素索引值:\n', np.where(arr > 5))   # where返回索引值。由于是二维的,返回行和列两组索引值,其索引逐一对应print('非零元素的索引值:\n', np.nonzero(arr))print('数组元素最大值的索引坐标为:\n', np.argmax(arr))   # 把数组摊平后返回索引坐标print('数组元素最小值的索引坐标为:\n', np.argmin(arr))   # 把数组摊平后返回索引坐标# 提取数组中满足某个条件的元素的方法:print('数组中的元素是否大于5:\n', arr > 5)   # 指定一个条件print('大于5的元素有:\n', arr[arr > 5])   # 提取bool对应的元素值# 运算结果:arr数组: [[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11]]满足条件的元素坐标: [[1 2] [1 3] [2 0] [2 1] [2 2] [2 3]]满足条件的元素索引值: (array([1, 1, 2, 2, 2, 2], dtype=int64), array([2, 3, 0, 1, 2, 3], dtype=int64))非零元素的索引值: (array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))数组元素最大值的索引坐标为: 11数组元素最小值的索引坐标为: 0数组中的元素是否大于5: [[False False False False] [False False  True  True] [ True  True  True  True]]大于5的元素有: [ 6  7  8  9 10 11]
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 01:31, Processed in 0.148812 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表