Python数据分析系列之Numpy基础知识第七篇

445 阅读3分钟

这是我参与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数组统计数据方法:
常用的统计指标:

  1. np.median(data): 获取中位数
  2. np.mean(data): 获取算术平均数
  3. 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