四、Numpy基础:数组运算及内置函数
一、矢量运算
- 数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式代替循环的做法。
- 矢量化数组运算性能比纯Python方式快上一两个数据级。
- 大小相等的两个数组之间的任何算术运算都会将其运算应用到元素级上的操作。
元素级操作:在NumPy中,大小相等的数组之间的运算,为元素级运算,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组,运算结果的位置跟操作数位置相同。
类型 | 函数 | 运算符 | 说明 |
基础运算 | add(a,b[,c]) | c=a+b | 加法 |
subtract(a,b[,c]) | c=a-b | 减法 | |
multiply(a,b[,c]) | c=a*b | 乘法 | |
divide(a,b[,c]) | c=a/b | 除法(python3中,divide与true_divide用法相同) | |
floor_divide(a,b[,c]) | c=a//b | 除法,结果向下取整 | |
negative(a[,c]) | c=-a | 取反 | |
power(a,b[,c]) | c=a**b | a的b次方 | |
remainder(a,b[,c]) | c=a%b | 取模(亦可写作mod(a,b[,c])) | |
fmod(a,b[,c]) | None | 带符号取模,正负由a决定 | |
比较运算 | equal(a,b[,c]) | c=a==b | 比较结果c是布尔数组 |
not_equal(a,b[,c]) | c=a!=b | ||
less(a,b[,c]) | c=a<b | ||
less_equal(a,b[,c]) | c=a<=b | ||
greater(a,b[,c]) | c=a>b | ||
greater_equal(a,b[,c]) | c=a>=b | ||
统计运算 | sum(a[,axis,c]) | None | 总和:可以通过axis参数定义统计维度 |
min(a[,axis,c]) | None | 最小值:可以通过axis参数定义统计维度 | |
max(a[,axis,c]) | None | 最大值:可以通过axis参数定义统计维度 | |
mean(a[,axis,c]) | None | 平均值:可以通过axis参数定义统计维度 | |
std(a[,axis,c]) | None | 标准差:可以通过axis参数定义统计维度 | |
var(a[,axis,c]) | None | 方差:可以通过axis参数定义统计维度 | |
median(a[,axis,c]) | None | 中位数:可以通过axis参数定义统计维度 | |
ptp(a[,axis,c]) | None | 极差:最大值最小值之差 | |
diff(a[,axis,c]) | None | 离散差:相邻数组元素的差值构成的数组 | |
三角函数运算 | sin(a[,axis,c]),arcsin(a[,axis,c]) | None | 正弦(反正弦) |
cos(a[,axis,c]),arccos(a[,axis,c]) | None | 余弦(反余弦) | |
tan(a[,axis,c]),arctan(a[,axis,c]) | None | 正切(反正切) | |
sinh(a[,axis,c]),arcsinh(a[,axis,c]) | None | 双曲型正弦(反双曲型正弦) | |
cosh(a[,axis,c]),arccosh(a[,axis,c]) | None | 双曲型余弦(反双曲型余弦) | |
tanh(a[,axis,c]),arctanh(a[,axis,c]) | None | 双曲型正切(反双曲型正切) | |
对数运算 | log(a[,axis,c]) | None | 以e为底a的对数值 |
log2(a[,axis,c]) | None | 以2为底a的对数值 | |
log10(a[,axis,c]) | None | 以10为底a的对数值 | |
log1p(a[,axis,c]) | None | 以e为底a+1的对数值 |
二、内置函数
2.1、np.where
- numpy版的三元表达式,用于特定条件的矢量元素判定,格式:where(condition,arr1,arr2),释义:arr1 if condition else arr2(如果arr1满足condition条件,就选arr1,否则选arr2)
import numpy as np a=np.linspace(-1.1,-1.5,5) b=np.linspace(-2.1,-2.5,5) condition=a<b python=[x if c else y for (x,y,c) in zip(a,b,condition)] numpy=np.where(condition,a,b) print("python版三元表达式:\n{0}\n格式为:{1}".format(python,type(python))) print("numpy版三元表达式:\n{0}\n格式为:{1}".format(numpy,type(numpy))) >>> python版三元表达式: [-2.1, -2.2, -2.3, -2.4, -2.5] 格式为:<class 'list'> numpy版三元表达式: [-2.1 -2.2 -2.3 -2.4 -2.5] 格式为:<class 'numpy.ndarray'>
2.2、np.unique
- 将数组中的元素进行去重操作
import numpy as np a=np.array(["图书","数码","小吃","数码","金属","市场","美食","图书"]) b=np.unique(a) print("原数组:\n",a) print("去重后的数组:\n",b) >>> 原数组: ['图书' '数码' '小吃' '数码' '金属' '市场' '美食' '图书'] 去重后的数组: ['图书' '小吃' '市场' '数码' '美食' '金属']
还有其它运算方法及内置函数后续补充