这是我参与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中还直接提供了数组的非常方便的一元操作方法:例如
- ndarray.sum():对数组的元素进行求和
- ndarray.min():对数组的元素进行求最小值
- 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])