python - 未找到 np.argsort() 实现
问题描述
我想看看是如何numpy.argsort()
工作的。
在文档中,来源
numpy.argsort()
在numpy.core.fromnumeric.py
. 没关系。 https://numpy.org/doc/stable/reference/generated/numpy.argsort.htmlcore.fromnumeric.argsort()
有点复杂。
不管装饰器如何,fromnumeric.argsort(arr)
返回_wrapfunc(arr, "argsort")
然后返回arr.argsort()
。没问题。
假设arr
是numpy.ndarray
,它可能在array_api.__init__.py
. https://github.com/numpy/numpy/blob/v1.21.0/numpy/core/fromnumeric.pyarray_api.argsort()
是从array_api._sorting_functions.argsort()
。好的。https://github.com/numpy/numpy/blob/main/numpy/array_api/__init__.py_sorting_functions.argsort()
来电numpy.argsort()
。这就是我一开始想要的。 https://github.com/numpy/numpy/blob/main/numpy/array_api/_sorting_functions.py
额外的
在
numpy.__init__.pyi
,numpy.argsort()
来自core.fromnumeric
https://github.com/numpy/numpy/blob/main/numpy/__init__.pyi1.
并且5.
是一回事。
是循环引用吗?虽然我知道这行得通。有it might be in array_api.__init__.py.
错2.
吗?那么,该实现的实际位置在哪里?
附言
我以为np.unique
是慢的时候return_index=True
。我想要np.unique
一个排序数组,但我找到了np.unique
调用np.argsort
。np.argsort
然后,我尝试在from之间进行区分,np.sort
以便我需要np.argsort
.
一开始我不得不这么说。
解决方案
为什么要查看源代码?在自己的c
代码项目中实现它?我认为它不会帮助您在 python 中更有效地使用它。在我使用的 Ipython 会话中??
In [22]: np.argsort??
...
return _wrapfunc(a, 'argsort', axis=axis, kind=kind, order=order)
好的,这是函数将责任转嫁给方法的典型案例。如果需要,函数版本会将输入转换为数组,然后调用数组的方法。通常功能版本有更完整的文档,但功能基本相同。
In [21]: arr.argsort??
Type: builtin_function_or_method
通常这就是故事的结局。
另一种方法是单击[source]
文档上的链接。这导致了同样的事情。
注意:
@array_function_dispatch(_argsort_dispatcher)
最近的版本增加了这dispatch
一层;查看发行说明以获取更多详细信息。根据我的经验,这只会使搜索代码变得更加困难。
另一个步骤是去github
搜索。有时这会带来一些有用的信息,但通常这是一场疯狂的追逐。
作为用户,我不需要知道“如何”的详细信息。阅读文档很容易,如果我还有问题,可以做一些实验。深入研究c
代码无助于更好地使用它。
至于您添加的问题:
所有ndarray
对象都是“多数组”,从 0 到 32 维。
github
在numpy
github
我搜索argsort
并选择了最有希望的文件 numpy/core/src/multiarray/methods.c
这个有功能
array_argsort(PyArrayObject *self,
PyObject *const *args, Py_ssize_t len_args, PyObject *kwnames)
跳过似乎处理输入参数的代码,看起来工作在
res = PyArray_ArgSort(self, axis, sortkind);
这似乎是在 numpy/core/src/multiarray/item_selection.c 中定义的
PyArray_ArgSort(PyArrayObject *op, int axis, NPY_SORTKIND which)
...
if (argsort == NULL) {
if (PyArray_DESCR(op)->f->compare) {
switch (which) {
default:
case NPY_QUICKSORT:
argsort = npy_aquicksort;
break;
case NPY_HEAPSORT:
argsort = npy_aheapsort;
break;
case NPY_STABLESORT:
argsort = npy_atimsort;
break;
...
ret = _new_argsortlike(op2, axis, argsort, NULL, NULL, 0);
等等 ....
这些都不能帮助我更好地使用它。
推荐阅读
- text-mining - 用于获取特定数据的电报机器人
- angular - 如何使用我的私钥加密数据并使用 JSEncrypt 使用我的公钥解密?
- python - 从混淆矩阵中绘制 ROC 曲线
- html - 使用哈希或 url 片段时设置活动链接样式?
- sql-server - 包在 SSDT 中运行,但不通过执行包实用程序
- mysql - 如何使用原子操作交换 MEMSQL 表
- html - Angularjs 1.5 版选择语句在刷新时未显示所选值
- r - ggplot2 - 如何添加额外的文本标签
- azure - 如何将 Azure 见解/操作组链接到 AutomationRunBook
- css - 离子如何将元素向右移动