ndarray聚合函数
聚合函数是对一组值(eg一个数组)进行操作,返回一个单一值作为结果的函数,当然聚合函数也可以指定对某个具体的轴进行数据聚合操作,常见的聚合操作有:平均值、最大值、最小值、方差等
import numpy as np ''' random模块 rand 返回 0 - 1 随机值 randn 返回一个样本具有标准正态分布 randint 返回随机的整数,位于半开区间[low,hight)size = 10 (3,3) random_integers(low[, high, size]) 返回随机的整数,位于闭区间 random 返回随机浮点数 ''' a = np.array([[1,2,3,4],[7,8,9,10]]) print(a) #输出为 [[ 1 2 3 4] # [ 7 8 9 10]] #amin返回最小值 print(np.amin(a,1)) #参数1 表示同行数据 输出为 [1 7] print(np.amin(a,0)) #参数0 表示同列数据 输出为 [1 2 3 4] #amax返回最大值 print(np.amax(a,1)) #输出为 [ 4 10] print(np.amax(a,0)) #输出为 [ 7 8 9 10] #mean平均值 print(np.mean(a)) #输出为 5.5 print(np.mean(a,0)) #求列平均值 输出为 [4. 5. 6. 7.] print(np.mean(a,axis = 1)) #求行平均值 输出为 [2.5 8.5] ''' 标准差:是与平均值的偏差的平方的平均值的平方根 std = sqrt(mean((x-x.mean())**2)) 如果数组是[1,2,3,4] 则平均值是 2.5 因此偏差是[1.5,0.5,0.5,1.5], 偏差的平方是[2.25,0.25,0.25,2.25] 并且其平均值的平方根,即sqrt(5/4) ''' arr2 = np.array([[1,2,3,4],[7,8,9,10]]) print(((arr2-arr2.mean())**2).sum()/arr2.size) #平均值的偏差的平方的平均值 输出为 10.25 print(np.mean(((arr2-arr2.mean())**2))) #平均值的偏差的平方的平均值 输出为 10.25 print(np.sqrt(((arr2-arr2.mean())**2).sum()/arr2.size)) #输出为 3.2015621187164243 print(np.sqrt(np.mean(((arr2-arr2.mean())**2)))) #输出为 3.2015621187164243 print(np.std(arr2,0)) #同列 输出为 [3. 3. 3. 3.] #方差是偏差的平方的平均值即mean(x-x.mean()**2) arr3 = np.array([[1,2,3,4],[7,8,9,10]]) print(arr3-arr3.mean()) #输出为 [[-4.5 -3.5 -2.5 -1.5] # [ 1.5 2.5 3.5 4.5]] print(((arr3-arr3.mean())**2).sum()/arr3.size) #输出为 10.25 print(np.mean((arr3-arr3.mean())**2)) #输出为 10.25 print(np.var(arr3)) #输出为 10.25
排序函数
NumPy中提供了各种排序相关功能, 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性,下表显示了三种排序算法的比较:
numpy.sort()——函数返回输入数组的排序副本
numpy.sort(a,axis,kind,order)
a:要排序的内容
axis:默认为1,按行排序;为0时,则按列排序
kind:默认为’quicksort’快速排序
order:如果数组包含字段,则是要排序字段
import numpy as np arr = np.array([[3,7],[9,1]]) print(arr) #输出为 [[3 7] # [9 1]] print(np.sort(arr)) #输出为 [[3 7] # [1 9]] print(np.sort(arr,axis = 0)) #按列排序 输出为 [[3 1] # [9 7]] #在sort函数中排序字段 dt = np.dtype([('name', 'S10'),('age', int)]) a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt) print(a) #输出为 [(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)] print(a['name']) #输出为 [b'raju' b'anil' b'ravi' b'amar'] print(np.sort(a,order = 'name')) #输出为 [(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)] print(np.sort(a,order = 'age')) #输出为 [(b'ravi', 17) (b'raju', 21) (b'anil', 25) (b'amar', 27)]
np.where函数
np.where函数是三元表达式x if condition else y的矢量化版本
import numpy as np a = np.where([[True, False], [True, True]],[[1, 2], [3, 4]],[[9, 8], [7, 6]]) print(a) #输出为 [[1 8] # [3 4]] xarr = np.array([1,2,3,4,5]) yarr = np.array([6,7,8,9,10]) condition = xarr < yarr #zip函数接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表) #传统的三元表达式 result1 = [x if c else y for (x,y,c) in zip(xarr,yarr,condition)] print(result1) #输出为 [1, 2, 3, 4, 5] result2 = np.where(condition,xarr,yarr) print(result2) #输出为 [1 2 3 4 5] #案例:将数组中的所有异常数字替换为0,比如将NaN替换为0 ''' 输出为 [[1. 2. 0. 4. ] [4. 5. 6. 0. ] [0. 7. 8. 9. ] [0. 2.71828183 3.14159265 4. ]] ''' arr = np.array([ [1,2,np.NaN,4], [4,5,6,np.NaN], [np.inf,7,8,9], [np.inf,np.e,np.pi,4] ]) #设置条件 condition = np.isnan(arr) | np.isinf(arr) print(np.where(condition,0,arr))
np.unique函数
np.unique函数的主要作用是将数组中的元素进行去重操作(也就是只保存不重复的数据)
import numpy as np arr = np.array(['图书','数码','小吃','数码','男装','小吃','美食','数码','女装']) for a in arr: print(a,end = ' ') #输出为 图书 数码 小吃 数码 男装 小吃 美食 数码 女装 print() arr2 = np.unique(arr) for a in arr2: print(a,end = ' ') #输出为 图书 女装 小吃 数码 男装 美食