这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
Numpy支持非常多条件且简单丰富易用的方法进行提取元素,下面介绍一些常用的方法:
Numpy数组根据条件提取元素方法:
where = np.mod(data, 4)==0表示获取数组中的元素和4相除的余数为零的数据:
In [4]: data
Out[4]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [5]: where = np.mod(data, 4)==0
下面的例子应用上述的条件使用numpy.extract(bool数组,数组)获取满足bool数组为True的在数相同位置的元素的值:
根据条件提取数组元素:
In [7]: np.extract(where, data)
Out[7]: array([ 0, 4, 8, 12])
下面例子的效果和上面的例子是一样,但是作用对象的要提取数据的数组,传入的为布尔数组:
也可以直接传入boolean数组获取数组元素:
In [8]: data[where]
Out[8]: array([ 0, 4, 8, 12])
Numpy数组统计非零元素个数方法:
下面的例子生成对称矩阵:
In [11]: data = np.eye(10)
下面例子使用numpy.count_nonzero(data)统计非零元素个数(默认统计所有非零个数):
统计非零元素个数(默认统计所有非零个数):
In [13]: np.count_nonzero(data)
Out[13]: 10
下面例子使用count_nonzero(data, axis=0)按列统计每列非零元素个数:
按列统计每列非零元素个数
In [14]: np.count_nonzero(data, axis=0)
Out[14]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
下面例子使用np.count_nonzero(data, axis=1)按行统计每列非零元素个数:
按行统计每列非零元素个数:
In [15]: np.count_nonzero(data, axis=1)
Out[15]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
下面例子使用np.count_nonzero(data, axis=0)按列统计每列非零元素个数:
按列统计每列非零元素个数
In [18]: np.count_nonzero(data, axis=0)
Out[18]: array([1, 1, 1, 2, 1])
下面例子使用np.count_nonzero(data, axis=1)按行统计每列非零元素个数:
按行统计每列非零元素个数
In [19]: np.count_nonzero(data, axis=1)
Out[19]: array([3, 3])
下面例子使用np.count_nonzero(data, axis=1, keepdims=True)按行统计每列非零元素个数,并且保留维度信息:
按行统计每列非零元素个数,并且保留维度信息
In [20]: np.count_nonzero(data, axis=1, keepdims=True)
Out[20]:
array([[3],
[3]])
Numpy数组统计数据方法:
常用的统计指标:
- np.median(data): 获取中位数
- np.mean(data): 获取算术平均数
- np.average(data, axis=0, weights=[1/6, 4/6, 1/6]): 获取加权平均数
In [27]: data
Out[27]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
下面的例子使用np.median(data)获取中位数:
中位数:
In [29]: np.median(data)
Out[29]: 4.0
下面的例子使用np.mean(data)获取算术平均数:
算术平均数
In [30]: np.mean(data)
Out[30]: 4.0
下面的例子使用np.average(data, axis=0, weights=[1/6, 4/6, 1/6])获取加权平均数:
加权平均数
In [37]: np.average(data, axis=0, weights=[1/6, 4/6, 1/6])
Out[37]: 2.0000000000000004