文章目录
- 一、NumPy通用函数
- 1、什么是通用函数
- 2、常见的一元通用函数如下:
- 3、常见的二元通用函数如下表:
- 二、利用NumPy数组进行数据处理
- 1、将条件逻辑转为数组运算
- 2、数组统计运算
- 3、数组排序(==sort()方法没有返回值==)
- 4、检索数组元素
- 5、唯一化及其他集合逻辑
一、NumPy通用函数
1、什么是通用函数
通用函数(ufunc)是一种针对ndarray中的数据执行元素级运算的函数。
注意:函数返回的是一个新的数组
通用函数中接收一个数组参数的函数称为一元通用函数。
那么同理,接受两个数组参数的称为二元通用函数。
2、常见的一元通用函数如下:
(这是一元函数,而且大部分是比较好理解的函数,就不再多写例子了)
函数 | 描述 |
abs | 计算整数、浮点数或复数的绝对值 |
sqrt | 计算各元素的平方根 |
square | 计算各元素的平方 |
exp | 计算各元素的指数ex |
log、log10、log2、log1p | 分别对自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x) |
sign | 计算元素的正负号:1(正数)、0(零)、-1(负数) |
ceil | 计算个元素的ceiling值,及大于或者等于改制的最小整数 |
floor | 计算元素的floor值,及小于等于该值的最大整数 |
rint | 将各元素四舍五入到最接近的整数 |
modf | 将数组的小数和整数部分以两个独立数组的形式返回 |
isnan | 返回一个表示“哪些值是NaN”的布尔型数组 |
isfinite、isinf | 分别返回表示“哪些元素是有穷的”或“哪些元素是无穷的”的布尔型数组 |
sin、sinh、cos、cosh、tan、tanh | 普通型和双曲型三角函数 |
arcos、arccosh、arcsin | 反三角函数 |
这里我们只拿两个比较有意思的来演示一下(地板,天花板函数):
import numpy as np
ret = np.array([1.57])
print(np.ceil(ret))#结果为[2.]
print(np.floor(ret))#结果为[1.]
3、常见的二元通用函数如下表:
函数 | 描述 |
add | 将数组中对应的元素相加 |
subtract | 从第一个数组中减去第二个数组中的元素 |
multiply | 数组元素相乘 |
divide,floor_divide | 除法或向下整除法(舍去余数) |
maximum、fmax | 元素级的最大值计算 |
minimum、fmin | 元素级的最小值计算 |
mod | 元素级的求模计算 |
copysign | 将第二个数组中的值的符号赋值给第一个数组中的值 |
greater、greater_equal、less、less_equal、equal、not_equal、logical_and、logical_or、logical_xor | 执行元素级的比较运算,最终产生布尔型数组,相当于运算符>、≥、<、≤、==、!= |
二、利用NumPy数组进行数据处理
1、将条件逻辑转为数组运算
NumPy的where()函数是三元表达式 x if condition else y的矢量化版本。
import numpy as np
arr_x = np.array([1, 5, 7])
arr_y = np.array([2, 6, 8])
arr_con = np.array([True, False, True])
result = np.where(arr_con, arr_x, arr_y)
print(result)
result2 = np.where(arr_x > 3, 1, 0)#赋值操作
print(result2)
2、数组统计运算
Numpy数组中与统计运算相关的方法
函数 | 描述 |
sum | 对数组中全部或某个轴向的元素求和 |
mean | 算术平均值 |
min | 计算数组中的最小值 |
max | 计算数组中的最大值 |
argmin | 表示最小索引值 |
argmax | 表示最大索引值 |
cumsum | 所有元素的累计和 |
cumprod | 所有元素的累计积 |
1.通过NumPy库中的相关方法,我们可以很方便地运用Python进行数组的统计汇总 |
import numpy as np
arr_x = np.array([1, 4, 5])
print(np.sum(arr_x))
print(np.mean(arr_x))
print(np.argmax(arr_x))
print(np.cumsum(arr_x))
import numpy as np
arr = np.arange(10)
arr = arr.reshape((2, 5))
print(arr)
print(arr.sum(axis=0))
print(arr.sum(axis=1))
#以上所有统计相关的函数,都可以指定轴
2.sun()
sum(a)默认为对输入参数中的所有元素进行求和
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
print(arr)
print(np.sum(arr))
b = np.arange(12).reshape(2, 6)
print(b)
print(np.sum(b))
sum()输入参数带有axis时,将按照指定axis进行对应求和
import numpy as np
b = np.arange(12).reshape(2, 6)
print(b)
print(np.sum(b))
print(np.sum(b, axis=0))
print(np.sum(b, axis=1))
sum()输入参数axis为多个轴时,则依次按要求在axis上进行多次求和
```python
import numpy as np
a = np.arange(12).reshape(2, 2, 3)
print(a)
print(np.sum(a, axis=(0, 1)))
print(np.sum(a, axis=(1, 2)))
print(np.sum(a, axis=(0, 1, 2)))
3.cumsum()
一维,就是当前列之前的和加到当前列上
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7])
print(np.cumsum(a))
二维,axis=0(第一行不动,将第一行累加到其他行);axis=1(进入最内层,转化成列处理。第一列不动,将第一列累加到其他列)
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.cumsum(a, axis=0))
print(np.cumsum(a, axis=1))
三维,axis=0(第一行不动,将第一行累加到其他行);axis=1(进入第二层,每个第二层第一行不动,累加到其他行);axis=2(进入最内层,转化成列处理,第一列不动,将其累加到其他列)
import numpy as np
a = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 20, 30]]])
print(np.cumsum(a, axis=0))
print(np.cumsum(a, axis=1))
print(np.cumsum(a, axis=2))
3、数组排序(sort()方法没有返回值)
1.如果希望对NumPy数组中的元素进行排序,可以通过sort()方法实现(默认通过最后一个轴排序)
import numpy as np
arr = np.array([[6, 2, 7], [3, 6, 2], [4, 3, 2]])
q = np.sort(arr)#此时axis=1或-1都是指最后一个轴(二维)
print(q)
2.如果希望对任何一个轴上的元素进行排序,则需要将轴的编号作为sort()方法的参数传入
import numpy as np
arr = np.array([[6, 2, 7], [3, 6, 2], [4, 3, 2]])
q = np.sort(arr, 0)
print(q)
4、检索数组元素
1.all()函数用于判断整个数组中的元素的值是否全部满足条件,如果满足条件返回True,否则返回False
import numpy as np
arr = np.array([[1, -2, -7], [-3, 6, 2], [-4, 3, 2]])
q = np.all(arr>0)#arr的所有元素是否都大于0
print(q)#输出结果为False
2.any()函数用于判断整个数组中的元素至少有一个满足条件就返回True,否则就返回False
import numpy as np
arr = np.array([[1, -2, -7], [-3, 6, 2], [-4, 3, 2]])
q = np.any(arr>0)#arr的所有元素是否有一个大于0
print(q)#输出结果为True
5、唯一化及其他集合逻辑
1.针对一维数组,NumPy提供了unique()函数来找出数组中的唯一值,并返回排序后的结果
import numpy as np
arr = np.array([12, 11, 34, 23, 12, 8, 11])
print(np.unique(arr))
2.in1d()函数用于判断数组中的元素是否在另一个数组中存在,该函数返回的是一个布尔型的数组
import numpy as np
arr = np.array([12, 11, 34, 23, 12, 8, 11])
print(np.in1d(arr, [11, 12]))
3.NumPy提供的有关集合的函数还有很多,常见的函数如下表所示:
函数 | 描述 |
unique(x) | 计算x中的唯一元素,并返回有序结果 |
intersect1d(x,y) | 计算x中的公共元素,并返回有序结果 |
union1d(x,y) | 计算x中的并集,并返回有序结果 |
in1d(x,y) | 得到一个表示“x”的元素是否包含“y”的布尔型数组 |
setdiff1d(x,y) | 集合的差,即元素在x中且不在y中 |
setxor1d(x,y) | 集合的对称差,及存在于一个数组中但不同时存在于两个数组中的元素 |