本教程解释了如何使用Numpy argsort函数。 它解释了np.argsort的语法,还展示了清晰的例子。
如果你需要具体的帮助,你可以点击其中任何一个链接。 这些链接将把你带到教程的相应部分。
目录
说了这么多,Numpy argsort有点不直观,而且很难理解。 如果你阅读整个教程,你可能会获得更好的理解。
考虑到这一点,让我们开始吧。
对Numpy Argsort的快速介绍
让我们首先快速介绍一下argsort函数。
对于Numpy用户来说,argsort函数常常令人困惑。 我认为理解它的作用的最好方法是看一个清晰的例子。
Numpy argsort按照排序数组的顺序返回输入的索引。
注意在这个直观的例子中,输出值是如何与输入值的索引相对应的。
- 10是输入数组中最小的值,与索引1相对应。
- 20是输入中的次大值,对应的索引是0。
- 30是输入中的次大值,对应于索引4。
- 40是输入中的次大值,对应于索引2。
- 50是输入中最大的值,对应于索引3。
因此,输入是一个数字数组。
但输出将是一个新的数组,它包含了输入值的索引,按照这些值的顺序排序。
所以它的操作方式类似于Numpy的排序函数,但它不是返回排序后的数值,而是返回索引。
为了帮助你理解,看看Python 中的一些工作实例可能会有帮助。 但首先,让我们快速看一下语法。
np.argsort 的语法
现在,让我们看一下 np.argsort 的语法。
一个简短的说明
在我们看语法之前,有一个简单的说明。
这里的语法解释和下面的例子都假定你已经用别名 "np
"导入了Numpy。
你可以通过这段代码做到这一点。
import numpy as np
指出这一点很重要(以防你不熟悉),因为你导入Numpy的具体方式会影响确切的语法。
以这种方式导入Numpy是Python数据科学家的共同约定,我们将继续使用它。
np.argsort 语法
np.argsort 的语法很简单。
你以np.argsort()
的方式调用该函数。
在括号内,你有几个参数,你可以用来控制函数的工作方式。
让我们来看看这些参数。
np.argsort的参数
np.argsort函数有几个参数。
a
axis
kind
还有一个第4个参数,叫做order
。 order
这个参数很少使用。 它的理解也比较复杂,所以我在本教程中不涉及它。
让我们更详细地看一下上面的3个参数。
a
(必填)
a
参数使你能够指定你要操作的输入阵列。
因此,如果你想对一个名为myarray
的数组进行操作,你可以将该函数调用为np.argsort(a = myarray)
。
请记住,这个参数是必须的,所以你需要为这个参数提供一个参数。
说了这么多,你不需要明确地使用参数名称本身。 相反,你可以按位置传入一个参数。 例如:np.argsort(myarray)
。 如果你没有明确使用a=
参数,那么argsort函数就会假定函数的第一个参数是要传递给a
参数的输入数组。
此外,argsort函数将接受我不同的数据结构作为输入。 通常,我们会使用一个Numpy数组作为输入。 但是 np.argsort 也会接受 Python 的列表和类似数组的对象。
axis
(可选)
你可以使用axis
参数来控制沿哪个轴使用argsort。
记住,Numpy 数组有轴。 轴就像沿着Numpy数组指向的方向。
因此,如果你使用axis = 0
,argsort将向下操作(对于一个二维或更高维的数组)。
如果你使用axis = 1
,argsort将在水平方向操作(同样,对于一个二维或更高维度的数组)。
axis
参数是可选的。 如果你没有明确使用它,它将默认为axis = -1
,这是数组的最后一个轴(例如,对于一个二维数组,轴1)。
kind
(可选)
kind
参数使你能够指定你想在排序操作中使用的排序算法。
要明确的是:在计算机科学中,有几种不同的算法,你可以用来对数据进行排序。
在np.argsort
,这里有几种不同的选择,可以通过kind
参数来选择使用哪种排序算法。
quicksort
heapsort
mergesort
这些不同的排序技术有不同的优势和劣势。 例如,有些排序算法比其他算法更快;有些排序算法使用更多内存;等等。
尽管如此,大多数时候,对于大多数目的,默认的(quicksort)就可以了。
如何使用Numpy Argsort的例子
好的,现在,让我们看看几个例子。
例子
先运行这段代码
在你运行这些例子之前,你需要导入Numpy。
你可以用这段代码来做这件事。
import numpy as np
请记住,通过使用上述导入语法,我们将能够用前缀np
(这是常见的惯例)来调用我们的Numpy函数。
例子1:在一个一维数组上使用argsort
让我们从一个简单的例子开始。
在这里,我们将在一个一维的Numpy数组上使用argsort。
首先,让我们用np.array函数创建一个数组。
array_1d = np.array([ 20, 10, 40, 50, 30])
现在,让我们应用Numpy的argmax函数。
np.argsort(a = array_1d)
输出
array([1, 0, 4, 2, 3])
解释
看一下输出。 输出的值是[1, 0, 4, 2, 3]
。
这些值是如果数组被排序后的索引值。
在输入数组中,值10是最小的值。 输入数组中的值10位于索引位置1。 因为如果我们对数组进行排序,10将是第一个值,它的对应索引,1,是输出数组中的第一项。
值20是输入数组中第二个最小的值。 这个值在输入数组中的索引位置是0。 所以0是输出中的第二个值。
...以此类推。
所以输出只是提供输入值的索引位置,如果输入数组被排序的话。
实例2:将argsort应用于二维数组
接下来,让我们看看Numpy argsort如何在二维数组上操作。
首先,我们将创建一个二维数组,使用Numpy数组函数。
array_2d = np.array([[100, 7, 555], [22, 333, 9]])
注意,我们有一些大的值和一些小的值。 这些值没有以任何方式进行排序。
现在,我们将应用np.argsort。
np.argsort(array_2d)
输出
array([[1, 0, 2],
[2, 0, 1]])
解释
这里发生了什么?
这个输出有排序后的行的索引。
但是为什么呢?
默认情况下,Numpy argsort是按照axis = -1
的方向对索引进行排序的。它默认是沿着最后一个轴进行操作。
这是一个二维数组,所以最后一个轴实际上是轴-1,它是指向水平方向的轴。
所以当我们在一个二维数组上使用Numpy argsort时,它是沿着行水平操作的。
因此,输出包含了排序后的行的索引值。
例子3:沿轴1使用argsort
现在让我们明确地使用轴参数。
在这里,我们将设置axis = 1
。
请记住,例子2中的代码实际上是在默认情况下对轴1进行操作的,所以输出结果也是一样的。 我们这次只是把它明确化。
在这个例子中,我们将重新使用我们在例子2中创建的数组,但是如果你没有运行那段代码,这里有创建数组的代码。
array_2d = np.array([[100, 7, 555], [22, 333, 9]])
所以现在我们有了我们的二维数组,让我们应用np.argsort与axis = 1
。
np.argsort(array_2d, axis = 1)
输出
array([[1, 0, 2],
[2, 0, 1]])
解释
如果你已经读过例子2,这应该是有意义的,但让我把它分解一下。
在这里,我们明确地在轴1上操作。
记住,对于一个二维数组,轴-1是指水平方向的轴。
因此,使用np.argsort()
和axis = 1
,使函数沿着行的方向进行水平操作。
输出是行的索引,如果输入的数组是沿着轴-1排序的话。
例子4:沿轴0使用argsort
让我们再做一个例子。
这里,我们将在0轴方向上使用Numpy argsort。
让我们首先创建我们的数组(这和前两个例子中的数组是一样的)。
array_2d = np.array([[100, 7, 555], [22, 333, 9]])
现在,让我们应用argsort。
np.argsort(array_2d, axis = 0)
输出
array([[1, 0, 1],
[0, 1, 0]])
解释
这可能仍然令人困惑,所以让我解释一下。
当我们使用argsort和axis = 0
,我们告诉argsort在0轴方向操作。
记住:对于一个二维数组,0轴是向下的。
因此,当我们使用np.argsort()
和axis = 0
时,我们是告诉函数在垂直方向上操作列。
因此,如果输入的数组沿0轴排序,输出的是逐列的索引。
在本教程中,我向你展示了如何使用Numpy argsort。
如果你需要对数组进行排序,Numpy argsort很有用,但如果你想真正擅长处理Numpy数组,你需要学习的Numpy函数还有很多。