今天主要来看下numpy中的排序功能。
1 排序
先来看一个例子:
np.sort可将数组排序,并不改变原有数组:
如果想将原数组变成排序后的数组,可以使用sort方法:
还有一个函数为argsort,它返回数组排序完成后的索引(并不是原数组对应的顺序):
注意,我们得到的是关于原数组对应排序完成后的索引,要得到排序后的新数组,只需:
2 广播
实际上,numpy的广播机制我们在之前的例子中就有所应用,那么什么是广播呢?我们来看个例子:
上图中y是一个数组,我们可以把它看成向量,而5是标量。按常理,向量和标量是不能相加的。但在numpy的机制中,y+5这个运算实际上把标量5扩展为向量数组[5,5,5],然后再和y中的每个元素相加,这个机制就叫做广播。
广播也是有一些规则的:
A.两个数组的维度不同,较小维度的数组在左边补1。
B.两个数组在任一维度都不匹配,维度为1的数组会自动扩展,以匹配另一个数组的形状。
C.两个数组在任一维度都不匹配,且没有维度为1,那么将会报错。
我们来举一些例子来理解上面的3个规则:
上图中,m为2*3数组,n为1维数组,即:
当我们进行m+n运算时,n的维度较小,所以左边补1,形状变为(1,3)。此时,m和n的第一个维度不匹配,所以维度为1的n数组扩展为(2,3),m+n即可进行运算:
再来看一个报错的例子:
现在有一个一维数组p,如果运行m+p,会发生什么情况呢?首先,p的维度较低,左边补1,扩展为(1,2)。然后,维度为1的数组再进行扩展,为(2,2)。而m的形状为(2,3),仍然不能匹配,所以会报错,无法进行计算:
numpy的介绍就到此为止了,之后会带来数据处理中经常使用的包——pandas,敬请期待。
领取专属 10元无门槛券
私享最新 技术干货