版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jakob_Hu/article/details/88919591
numpy的数组 处理使用的是简洁的数组表达式,免去了写循环语句的过程.
数组的条件逻辑判断
Python中最简洁的判断式是 三元表达式,形式为 x if condition else y。在numpy数组中。np.where方法是三元表达式的矢量化版本。假设现在有两个数组和一个布尔数组,
现在要以cond数组中的值选取 xarr和yarr中的值,如果值为True,取xarr的值;反之,取yarr的值。
首先使用的是Python自带的列表表达式,
需要将三个数组以 zip处理使得同一位置上相同的元素对应,之后在进行判断。这样的做法缺点在于:
1.对较大的数组处理速度很慢,因为是纯Python实现。
2.无法用于多维数组。
而numpy的where方法则解决了上面的问题,而且写法简便,
第二个和第三个参数不一定是数组,也可以是标量,如果将一个矩阵大于0的数都替换为2,小于0的数都替换为-2,
where方法是能够嵌套的,
上面的多重条件句等同于,
基本数据统计
sum和mean方法,
sum和mean方法是能够接收一个 axis参数的,用于统计该轴上的数据值,得到的结果是第一维度的数组。
var和std方法,
#var方法求方差
a = np.array([[1, 2], [3, 4]])
np.var(a) #返回 1.25,是整个数组的方差
np.var(a, axis=0) #返回 array([ 1., 1.]),是编号为0的轴(行)的方差
np.var(a, axis=1) #返回 array([ 0.25, 0.25]),编号为1的轴的方差
#相同的数组,精度越高得到的值越精确
a = np.zeros((2, 512*512), dtype=np.float32)
np.var(a) #返回 0.20250003
np.var(a, dtype=np.float64) #返回 0.20249999932944759
#std是标准差的求值函数,用法与var相同
min和max方法,在官方文档中,这两个方法参考的都是 np.amin和np.amax方法,
a = np.arange(4).reshape((2,2)) # 返回 array([[0, 1],
# [2, 3]])
np.amin(a) #返回0,整个数组的最小值
np.amin(a, axis=0) # 返回 array([0, 1]), 编号为0的轴方向上的最小值
np.amin(a, axis=1) # 返回 array([0, 2]),编号为1的轴方向上的最小值
cumsum方法和cumpro方法,传入的是轴的编号,所求的结果是降一维度的累加或累乘,如果是一维数组无需指定axis参数,指定axis参数反而会报OutOfBound异常