Python数据分析系列之Numpy常用操作第三篇

149

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战
在Numpy中存在着许多和Python自带的相似方法,它们函数名相似且功能也相似,对经常使用Python自带的列表等容器的使用者非常友好和上手。下面介绍一些在Numpy中常用的方法:

创建类似Python 的range函数功能的Numpy数组的方法:
下面的例子创建一个从1开始到10,步长为2的一维Numpy数组

In [21]: np.arange(1, 10, 2)
Out[21]: array([1, 3, 5, 7, 9])

但是当需要创建小数构成的数组时,由于一个整数到另一个整数之间存在无数个小数,使用arange就不能实现了。所以Numpy提供了linspace函数:
下面的例子生成0到10之前等距的10个数:
使用np.linspace(起点,终点,需要生成的数字个数)方法生成numpy数组:

In [25]: np.linspace(0, 10, 10)
Out[25]:
array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,
        5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])

Numpy运算:
Numpy的运算是基于元素级别的,具体可以看以下例子理解:
基于元素级别的的意思是逐个元素进行运算,是以广播的方式进行的,并且相同位置的元素会进行相应的操作。

下面的例子是两个相同形状的数组进行相同位置的元素相减, 返回的是新数组:

In [29]: data1
Out[29]: array([1, 2, 3, 4])

In [30]: data2
Out[30]: array([2, 3, 4, 5])

In [31]: data2 - data1
Out[31]: array([1, 1, 1, 1])

下面的例子是逐个元素乘以3, 返回的是新数组:

In [32]: data1 * 3
Out[32]: array([ 3,  6,  9, 12])

下面的例子是逐个元素和3进行比较大小,返回的是布尔数组:

In [33]: data1 > 3
Out[33]: array([False, False, False,  True])

上面的计算都不是正在的矩阵运算,Numpy进行矩阵运算可以使用下面的方法进行:

如果要进行矩阵运算,需要使用 @dot函数进行运算:

下面的例子使用 @dot函数进行矩阵运算:

In [34]: data1 @ data2
Out[34]: 40

In [35]: data1.dot(data2)
Out[35]: 40

Numpy还提供了一些就地修改的自加、自减、自乘、自除的方法:

类似于Python中的+=, *=是在原对象上进行就地修改的:

下面的例子使用*=进行逐个元素自乘运算:

In [36]: data1 *= 2

In [37]: data1
Out[37]: array([2, 4, 6, 8])

下面的例子使用+=进行逐个元素自加运算:

In [38]: data2
Out[38]: array([2, 3, 4, 5])

In [39]: data2 += 1

Numpy中还直接提供了数组的非常方便的一元操作方法:例如

  1. ndarray.sum():对数组的元素进行求和
  2. ndarray.min():对数组的元素进行求最小值
  3. ndarray.max():对数组的元素进行求最大值 Numpy一元操作:

下面的例子使用ndarray.sum()对数组的元素进行求和:

In [42]: data1
Out[42]: array([2, 4, 6, 8])

In [43]: data1.sum()
Out[43]: 20

下面的例子使用ndarray.min()对数组的元素进行求最小值:

In [44]: data1.min()
Out[44]: 2

下面的例子使用ndarray.max()对数组的元素进行求最大值:

In [45]: data1.max()
Out[45]: 8

对于多维数组的一元运算操作,可以通过指定axis的值进行运算:
axis为0表示按列进行计算;axis为1表示按行进行计算

In [46]: data = np.arange(12).reshape(3,4)

In [47]: data
Out[47]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [49]: data.sum(axis=1)
Out[49]: array([ 6, 22, 38])