简介
NumPy中的函数运算非常多,其中包括算术、统计、排序和条件等。正是这么丰富的函数才使得NumPy越发强大,能够快速处理各种数据。
算术函数
介绍一下常见的算术函数:
函数 | 描述 |
---|---|
abs() | 计算各元素的绝对值 |
add() | 将数组中的对应元素相加 |
arcsin(), arccos(), arctan(), arcsinh(), arccosh(), arctanh() | 反三角函数 |
around() | 返回指定数字的四舍五入值 |
ceil() | 返回大于等于该值的最小整数 |
degrees() | 将弧度转换为角度 |
divide() | 数组元素相除 |
exp() | 计算各元素的指数e的x次方 |
floor() | 返回小于等于该值的最大整数 |
log(), log10(), log2(), log1p() | 分别是底数为e、底数为10、底数为2和log(1+x) |
mod() | 元素级的求模计算 |
multiply() | 数组元素相乘 |
power() | 对于第一个数组中的元素A,根据第二个数组中的相应元素B,返回A的B次方 |
reciprocal() | 返回参数逐元素的倒数 |
sin(), cos(), tan(), sinh(), cosh(), tanh() | 普通型和双曲型三角函数 |
sqrt() | 计算各元素的平方根 |
square() | 计算各元素的平方 |
subtract() | 从第一个数组中减去第二个数组中的元素 |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
>>>import numpy as np ''' 返回绝对值 ''' >>>a = np.array([-1, 4, 1, -3]) >>>np.abs(a) array([1, 4, 1, 3]) ''' 数组相加 ''' >>>b = np.array([1]) >>>np.add(a, b) array([ 0, 5, 2, -2]) ''' 返回弧度 ''' >>>np.arcsin(1) 1.5707963267948966 ''' 四舍五入的数值,保留一位小数 注意5.25没有变成5.3,是因为取偶 机制,选择保留偶数值,比如5.35保留一位就是5.4 ''' >>>c = np.array([1.12, 5.25, 5.35, -7.65, -2.15]) >>>np.around(c, 1) array([ 1.1, 5.2, 5.4, -7.6, -2.2]) ''' 大于等于该值的最小整数 ''' >>>np.ceil([1.2]) array([2.]) ''' 将弧度转换为角度 ''' >>>np.degrees(np.pi) 180.0 ''' 数组元素相除 ''' >>>np.divide(a, b) array([-1., 4., 1., -3.]) ''' 计算各元素的指数e的x次方 ''' >>>np.exp(a) array([3.67879441e-01, 5.45981500e+01, 2.71828183e+00, 4.97870684e-02]) ''' 小于等于该值的最大整数 ''' >>>np.floor([1.2]) array([1.]) ''' 底数为e ''' >>>np.log(1) 0.0 ''' 求模计算(余数) ''' >>>np.mod(10, 3) 1 ''' 相乘 ''' >>>np.multiply(2, 3) 6 ''' 返回A的B次方 ''' >>>np.power(2, 3) 8 ''' 倒数 ''' >>>np.reciprocal([4.0, 0.1, -0.2]) array([ 0.25, 10. , -5. ]) ''' 三角函数 ''' >>>np.sin(np.pi/2) 1.0 ''' 平方根 ''' >>>np.sqrt([2, 4, 6 ,8]) array([1.41421356, 2. , 2.44948974, 2.82842712]) ''' 平方 ''' >>>np.square([2, 3, 4, 5]) array([ 4, 9, 16, 25], dtype=int32) ''' 相减 ''' >>>np.subtract(a, b) array([-2, 3, 0, -4]) |
统计函数
在NumPy中还有一些统计函数,可以快速进行数据分布分析。
函数 | 描述 |
---|---|
amax(), max() | 数组中的元素沿指定轴的最大值 |
amin(), min() | 数组中的元素沿指定轴的最小值 |
average() | 计算数组中元素的加权平均值 |
maximum() | 接受两个数组,返回一一对应的最大值 |
mean() | 返回数组中元素的算术平均值 |
median() | 计算中位数 |
minimum() | 接受两个数组,返回一一对应的最小值 |
percentile() | 表示小于某个值的观察值的百分比 |
ptp() | 数组中元素最大值与最小值的差 |
var | 计算方差 |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
>>>import numpy as np ''' 返回指定轴最大值,不提供轴默认为所有元素最大值 ''' >>>np.max([[1, 2], [3, 4]]) 4 >>>np.max([[1, 2], [3, 4]], 0) array([3, 4]) >>>np.max([[1, 2], [3, 4]], 1) array([2, 4]) ''' 返回指定轴最小值,不提供轴默认为所有元素最小值 ''' >>>np.min([[1, 2], [3, 4]]) 1 >>>np.min([[1, 2], [3, 4]], 0) array([1, 2]) >>>np.min([[1, 2], [3, 4]], 1) array([1, 3]) ''' 计算加权平均值,如果不提供权重,则计算算术平均值 提供权重后在这里相当于(1*4+2*3+3*2+4*1)/(4+3+2+1) 指定returned为True后,可以输出权重的和(4+3+2+1) ''' >>>np.average([1, 2, 3, 4]) 2.5 >>>np.average([1, 2, 3, 4], weights=[4, 3, 2, 1]) 2.0 >>>np.average([1, 2, 3, 4], weights=[4, 3, 2, 1], returned=True) (2.0, 10.0) ''' 接受两个数组,返回一一对应的最大值 ''' >>>a = np.random.randn(4) >>>a array([0.60477184, 1.21441659, 0.34760632, 0.32312792]) >>>b = np.random.randn(4) >>>b array([ 1.13788454, 0.82205197, -0.97924103, -1.08901146]) >>>np.maximum(a, b) array([1.13788454, 1.21441659, 0.34760632, 0.32312792]) ''' 返回算术平均值(0+1+2+3+4)/5 ''' >>>np.mean(np.arange(5)) 2.0 ''' 计算中位数1, 2, 3, 4的中位数为(2+3)/2 ''' >>>np.median(np.arange(1, 5)) 2.5 ''' 接受两个数组,返回一一对应的最小值 ''' >>>np.minimum(a, b) array([ 0.60477184, 0.82205197, -0.97924103, -1.08901146]) ''' 小于某个值的观察值的百分比 ''' >>>c = np.arange(1, 11).reshape(2, 5) >>>c array([[ 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10]]) # 在c中对应50%百分位的数,也就是中位数 >>>np.percentile(c, 50) 5.5 # 指定第0轴,也就是沿着竖行找50%百分位的数 >>>np.percentile(c, 50, 0) array([3.5, 4.5, 5.5, 6.5, 7.5]) # 指定第1轴,也就是沿着横行找50%百分位的数 >>>np.percentile(c, 50, 1) array([3., 8.]) # 使用keepdims关键能保留数组形状 >>>np.percentile(c, 50, 1, keepdims=True) array([[3.], [8.]]) ''' 返回数组中元素最大值与最小值的差,同样可以指定轴 ''' >>>np.ptp(c) 9 >>>np.ptp(c, 0) array([5, 5, 5, 5, 5]) >>>np.ptp(c ,1) array([4, 4]) ''' 计算方差,mean((x - x.mean())** 2),同样可以指定轴 ''' >>>np.var(c) 8.25 >>>np.var(c, 0) array([6.25, 6.25, 6.25, 6.25, 6.25]) >>>np.var(c, 1) array([2., 2.]) |
排序函数
NumPy中也有处理排序相关的函数:
函数 | 描述 |
---|---|
sort() | 返回输入数组的排序副本 |
argsort() | 返回数组值从小到大的索引值 |
argmin() | 沿给定轴返回最小元素的索引 |
argmax() | 沿给定轴返回最大元素的索引 |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
>>>import numpy as np ''' 对数组排序,默认对最后一个轴进行排序,也可以指定轴排序 ''' >>>a = np.array([[3, 9, 6],[6, 1, 8], [5, 2, 0]]) >>>a array([[3, 9, 6], [6, 1, 8], [5, 2, 0]]) >>>np.sort(a) array([[3, 6, 9], [1, 6, 8], [0, 2, 5]]) >>>np.sort(a, 0) array([[3, 1, 0], [5, 2, 6], [6, 9, 8]]) >>>np.sort(a, 1) array([[3, 6, 9], [1, 6, 8], [0, 2, 5]]) ''' 返回数组值从小到大的索引值 ''' >>>np.argsort([5, 2, 0]) array([2, 1, 0], dtype=int64) ''' 沿给定轴返回最小元素的索引 ''' >>>np.argmin([5, 2, 0]) 2 ''' 沿给定轴返回最大元素的索引 ''' >>>np.argmax([5, 2, 0]) 0 |
条件函数
函数 | 描述 |
---|---|
extract() | 根据某个条件从数组中抽取元素,返回满条件的元素 |
isnan() | 判断哪些是NaN,返回布尔型数组 |
nonzero() | 返回输入数组中非零元素的索引 |
where() | 返回输入数组中满足给定条件的元素的索引 |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
>>>import numpy as np ''' 根据某个条件从数组中抽取元素,返回满条件的元素 ''' >>>a = np.arange(4).reshape(2, 2) >>>a array([[0, 1], [2, 3]]) >>>np.extract(a>1, a) array([2, 3]) ''' 判断哪些是NaN,返回布尔型数组 ''' >>>b = np.array([[np.nan, 1], [2, np.nan]]) >>>b array([[nan, 1.], [ 2., nan]]) ''' 返回输入数组中非零元素的索引 ''' >>>np.nonzero([0, 1, 0, 3, 0, 5]) (array([1, 3, 5], dtype=int64),) ''' 返回输入数组中满足给定条件的元素的索引,索引分别为(1,0)和(1,1) ''' >>>np.where(a>1) (array([1, 1], dtype=int64), array([0, 1], dtype=int64)) |
总结
本文详细地介绍了NumPy中的各种函数运算,值得一提的是,在其他库比如:Pandas和TensorFlow中也能找到相似的方法。因此,将NumPy函数运算融会贯通能够为后面的学习做好铺垫。