通用函数
通用函数(ufunc)是对数组中的数据执行元素级运算的函数。常用的一元通用函数如下表所示。
函数名 | 说明 |
---|---|
abs、fabs | 计算整数、浮点数或复数的绝对值,对于非复数值,可以使用更快的fabs |
sqrt | 计算各元素的平方根,相当于arr ** 0.5 |
square | 计算各元素的平方,相当于arr ** 2 |
exp | 计算各元素的指数ex |
log、log10、log2、log1p | 分别是自然对数(以e为底)、以10为底的log、以2为底的log、log(1+x) |
sign | 计算各元素的正负号:1(正数)、0(零)、-1(负数) |
ceil | 计算各元素的ceiling值,即大于等于该值的最小整数 |
floor | 计算各元素的floor值,即小于等于该值的最大整数 |
rint | 将各元素值四舍五入到最接近的整数,并保留之前的dtype |
modf | 将数组的小数和整数部分以两个独立数组的形式返回 |
isnan | 返回一个值为NaN的布尔型数组 |
isfinite、isinf | 分别返回一个表示“哪些元素是有穷的”或“哪些元素是无穷的布尔型数组” |
cos、cosh、sin、sinh、tan、tanh | 普通型和双曲型三角函数 |
arccos、arccosh、arcsin、arcsinh、arctan、arctanh | 反三角函数 |
logical_not | 计算各元素not x的真值,相当于-arr |
二元通用函数如下表所示。
函数名 | 说明 | |
---|---|---|
add | 将数组中对应元素相加 | |
subtract | 从第一个数组中减去第二个数组中元素 | |
multiple | 数组元素相乘(即点乘) | |
divide、floor_divide | 除法或向下圆整除法 | |
power | 对第一个数组中元素A,根据第二个数组中的相应元素B,计算AB | |
maximum、fmax | 元素级最大值计算,fmax将忽略NaN | |
minimum、fmin | 元素级最小值计算,fmin将忽略NaN | |
mod | 元素级的求模运算(除法的余数) | |
copysign | 将第二个数组中的值的符号复制给第一个数组中值 | |
greater、greater_equal、less、less_equal、equal、not_equal | 执行元素级的比较运算符,最终产生布尔型数组,相当于中缀运算符>、>=、<、<=、==、!= | |
logical_and、logical_or、logical_xor | 执行元素级的真值逻辑运算,相当于中缀运算符&、 | 、^ |
上述两表是常用的元素级一元、二元函数,接下来以sqrt()函数和square()函数为例讲解通用函数的用法,具体示例如下所示:
In [1]: import numpy as np
In [2]: arr = np.arange(1,10).reshape(3,3)
In [3]: sq = np.sqrt(arr)
In [4]: squ = np.square(arr)
上述代码是通用函数sqrt()和square()函数的使用,其中In [2]是创建一个3行3列的数组,并将其赋值给变量arr;In [3]是sqrt()函数的使用,并将结果赋值给变量sq;In [4]是square()函数的使用,并将结果赋值给变量squ。变量sq和squ的运行结果如下所示:
In [5]: sq
Out[5]:
array([[1. , 1.41421356, 1.73205081],
[2. , 2.23606798, 2.44948974],
[2.64575131, 2.82842712, 3. ]])
In [6]: squ
Out[6]:
array([[ 1, 4, 9],
[16, 25, 36],
[49, 64, 81]], dtype=int32)
从上述运行结果可以看出,变量sq是数组arr中的所有数值的平方根,而变量squ是数组arr中所有数值的平方数,并且包含数组的数据类型。
数组级别的函数
数组级别的函数一般是基本数组统计函数,例如,聚合类的函数求和(sum)、求平均数(mean)等,基本的数组统计方法如下表所示。
方法名 | 说明 |
---|---|
sum | 对数组中全部或某轴向的元素求和,零长度的数组的sum为0 |
mean | 算术平均数,零长度的数组的mean为NaN |
std、var | 分别为标准差和方差,自由度可调(默认为n) |
min、max | 最大值和最小值 |
argmin、argmax | 分别为最大和最小元素的索引 |
cumsum | 所有元素的累计和 |
cumprod | 所有元素的累计积 |
上表是基本的数组统计方法,接下来以sum()函数和mean()函数为例讲解数组级别函数的用法,具体示例如下所示:
In [21]: import numpy as np
In [22]: arr = np.random.randint(10,size = 20).reshape(4,5)
In [23]: sa = arr.sum()
In [24]: sac = arr.sum(0)
In [25]: ma = arr.mean()
In [26]: mar = arr.mean(axis = 1)
上述代码是数组级别函数sum()和mean()的使用,其中In [22]是创建了一个4行5列的随机数组,并将其赋值给变量arr;In [23]是计算数组arr的总和,并将结果赋值给变量sa;In [24]是计算数组arr每一列的和,并将结果赋值给变量sac;In [25]是计算数组arr的平均数,并将结果赋值给变量ma;In [26]是计算数组arr每一行的平均数,并将最终结果赋值给变量mar。各变量的运行结果如下所示:
In [27]: arr
Out[27]:
array([[2, 6, 7, 7, 0],
[3, 0, 6, 1, 8],
[8, 1, 4, 5, 4],
[8, 8, 2, 6, 4]])
In [28]: sa
Out[28]: 90
In [29]: sac
Out[29]: array([21, 15, 19, 19, 16])
In [30]: ma
Out[30]: 4.5
In [31]: mar
Out[31]: array([4.4, 3.6, 4.4, 5.6])
布尔数组函数
布尔数组中True为1,False为0,具体示例如下所示:
In [47]: import numpy as np
In [48]: arr = np.random.randint(10,size = 20).reshape(4,5)
In [49]: arr1 = arr >0
In [50]: arrs = arr1.sum()
In [51]: arrt = type(arr1)
上述代码是对布尔数组进行操作,其中In [48]是创建了一个4行5列的随机数组,并将其赋值给变量arr;In [49]是判断数组arr中数值大于0的值,并将结果赋值给变量arr1;In [50]是计算数组arr1的总和,并将结果赋值给变量arrs;In [51]是判断数组arr1中数据类型,并将结果赋值给变量arrt。各变量的运行结果如下所示:
In [52]: arr
Out[52]:
array([[2, 9, 8, 7, 9],
[6, 7, 7, 2, 0],
[7, 2, 8, 5, 7],
[2, 9, 7, 8, 3]])
In [53]: arr1
Out[53]:
array([[ True, True, True, True, True],
[ True, True, True, True, False],
[ True, True, True, True, True],
[ True, True, True, True, True]])
In [54]: arrs
Out[54]: 19
In [55]: arrt
Out[55]: numpy.ndarray
any()和all()函数通常用来对布尔数组进行特定判断,其用法具体如下:
- any()函数:只要当布尔数组中有一个为True,则函数返回结果为True。
- all()函数:当布尔数组中所有值均为True时,函数返回结果才为True。
在上述示例中使用any()函数和all()函数,运行结果如下:
In [56]: arr1.any()
Out[56]: True
In [57]: arr1.all()
Out[57]: False
从上述运行结果可以看出,数组arr1中含有1个False,19个True,因此any()函数返回结果为True,all()函数返回结果为False。
网友评论