2.3 通用函数
2.3.1 元素级数字函数
🚩NumPy 中和数学相关的函数有很多:abs、sqrt、square、exp、log、sin、cos、tan,maxinmum、minimum、all、any、inner、clip、round、trace、ceil、floor,下面我们挑几个常用的进行代码演示,感兴趣的读者可以自己搜索其他函数的用法并实践,这里不做过多演示:
# 圆周率 display(np.pi) # 计算 sin90° display(np.sin(90)) # 这是不合法的,90是int型,而非度数 display(np.sin(np.pi / 2)) # pi 是 180°,故 pi / 2 就代表 90° # 计算 cos90° display(np.cos(np.pi / 2))
一个很有意思的现象出现了,计算 cos90°的结果并不显示0,而是显示e-7,这是因为我们在计算的过程中会有精度问题,故我们一般表示0即当一个数小于一个很小的数的时候,我们就认为这个数为0,我们可以使用 round(n) 函数让它保留n位小数:
# 保留一位小数: display(np.cos(np.pi / 2).round(1)) # 保留五位小数: display(np.cos(np.pi / 2).round(5))
可以看到,就算我们保留五位小数,依旧是0,故我们认为这个数是0
# 开平方 display(np.sqrt(1024)) # 平方 display(np.square(8)) # 幂运算 display(np.power(2, 3)) # 计算2的3次方 # log运算 display(np.log2(16)) # 计算log以2为底16的对数
# 依次比较两个等长数组,返回对应位置元素的最大值 x = np.array([6, 6, 0, 7, 2, 5]) y = np.array([9, 5, 6, 3, 4, 2]) display(np.maximum(x, y)) # 依次比较两个等长数组,返回对应位置元素的最小值 x = np.array([6, 6, 0, 7, 2, 5]) y = np.array([9, 5, 6, 3, 4, 2]) display(np.minimum(x, y))
# 返回一维数组向量内积 arr = np.random.randint(0, 10, size = (2, 2)) display(arr) np.inner(arr[0], arr)
a = 6.66666 # 向上取整 display(np.ceil(a)) # 向下取整 display(np.floor(a))
# 裁剪,小于就拔高,大于就降低 arr = np.random.randint(0, 30, size = 20) display(arr) # 10:小于10:变成10; # 20:大于20:变成20 np.clip(arr, 10, 20)
2.3.2 where函数
import numpy as np arr1 = np.array([9, 7, 9, 9, 6]) arr2 = np.array([2, 1, 2, 0, 6]) cnt = np.array([False, False, True, False, True]) # 根据条件进行筛选 display(np.where(cnt,arr1,arr2)) # True选择arr1,False选择arr2的值 arr3 = np.random.randint(0, 30, 20) display(arr3) # 如果 arr3 的元素值小于15就输出,否则输出-15 display(np.where(arr3 < 15, arr3, -15))
2.3.3 排序方法
🚩NumPy中还提供了排序方法,排序方法是就地排序,即直接改变原数组:
arr.sort()、np.sort()、arr.argsort()
import numpy as np arr = np.array([14, 9, 13, 13, 18, 18, 18, 7, 5, 11]) # 直接让原数组从小到大进行排序 arr.sort() display(arr) # 返回深拷贝排序结果 np.sort(arr) arr = np.array([14, 9, 13, 13, 18, 18, 18, 7, 5, 11]) display(arr) # 返回从小到大排序的索引 display(arr.argsort())