np.argsort() 未找到实现
np.argsort() implementation is not found
我想看看 numpy.argsort()
是如何工作的。
在文档中,numpy.argsort()
的来源在 numpy.core.fromnumeric.py
。没关系。
https://numpy.org/doc/stable/reference/generated/numpy.argsort.html
core.fromnumeric.argsort()
稍微复杂一点。
不考虑装饰器,fromnumeric.argsort(arr)
returns_wrapfunc(arr, "argsort")
然后returnsarr.argsort()
。没问题。
假设 arr
是 numpy.ndarray
,它可能在 array_api.__init__.py
。
https://github.com/numpy/numpy/blob/v1.21.0/numpy/core/fromnumeric.py
array_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__.pyi
1.
和5.
是一回事。
是循环引用吗?虽然我知道那行得通。 2.
中的it might be in array_api.__init__.py.
错了吗?那么,该实现的实际位置在哪里?
P.S.
我认为 np.unique
在 return_index=True
时很慢。我想 np.unique
排序数组,但我发现 np.unique
调用 np.argsort
。然后,我尝试区分 np.argsort
与 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]
link。这导致了同样的事情。
通知:
@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);
等等....
None 帮助我更好地使用它。
我想看看 numpy.argsort()
是如何工作的。
在文档中,
numpy.argsort()
的来源在numpy.core.fromnumeric.py
。没关系。 https://numpy.org/doc/stable/reference/generated/numpy.argsort.htmlcore.fromnumeric.argsort()
稍微复杂一点。
不考虑装饰器,fromnumeric.argsort(arr)
returns_wrapfunc(arr, "argsort")
然后returnsarr.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.
是一回事。
是循环引用吗?虽然我知道那行得通。 2.
中的it might be in array_api.__init__.py.
错了吗?那么,该实现的实际位置在哪里?
P.S.
我认为 np.unique
在 return_index=True
时很慢。我想 np.unique
排序数组,但我发现 np.unique
调用 np.argsort
。然后,我尝试区分 np.argsort
与 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]
link。这导致了同样的事情。
通知:
@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);
等等....
None 帮助我更好地使用它。