我似乎找不到numpy argmax的代码。
文档中的源链接将我引向这里,它没有任何实际代码。
我浏览了所有提到argmax的函数,使用github搜索工具,但仍然没有成功。我肯定我漏掉了什么。
有人能把我引向正确的方向吗?
谢谢
发布于 2022-04-19 23:44:02
Numpy是用C编写的。它使用一个模板引擎来解析一些注释以生成许多版本的相同泛型函数(通常用于许多不同的类型)。这个工具对于生成快速代码非常有帮助,因为C语言不提供(适当的)模板,比如C++。但是,它也使代码变得更加神秘,因为函数的名称通常是生成的。例如,泛型函数名可能类似于@TYPE@_@OP@,其中@TYPE@和@OP@是两个宏,每个宏都可以采用不同的值。除此之外,CPython绑定还使代码更加复杂,因为必须从具有复杂数组(可能具有大量维度和自定义用户类型)的CPython代码和需要解码的CPython参数调用C函数。
_PyArray_ArgMinMaxCommon是一个很好的切入点,但它只是一个包装函数,而不是主要的计算函数。只有当您计划从Python中更改Numpy函数的原型时,它才会很有用。
主要的计算函数是 这里。函数上方的注释是用来生成函数变体的注释(例如。CDOUBLE_argmax)。注意,在主类型下面有一些替代的特定实现,如OBJECT_argmax,因为CPython对象和字符串的计算方式必须有所不同。谢谢你对Numpy的贡献。
发布于 2022-04-19 21:04:28
正如注释中提到的,您可能会在C代码实现(这里在_PyArray_ArgMinMaxCommon下)中找到正在搜索的内容。代码本身可能非常复杂,所以如果您的目的是在numpy上打开一个具有广泛想法的问题,那么无论如何我都会在您链接的页面上这样做。
https://stackoverflow.com/questions/71930194
复制相似问题