numpy argmax未从生成器表达式获取所有值

numpy argmax未从生成器表达式获取所有值,numpy,generator,Numpy,Generator,下面的输出 import numpy as np print(np.argmax([i for i in range(0, 10)])) print(np.argmax(i for i in range(0, 10))) 是 为什么argmax只减少生成器表达式一次?因为我没有所需的声誉金额,所以我将此添加为一个答案 正如@hpaulj所建议的,np.argmax在numeric.py中调用asarray函数。在这里,开发人员在代码中提到了这一点: def asarray(a, dtype=N

下面的输出

import numpy as np
print(np.argmax([i for i in range(0, 10)]))
print(np.argmax(i for i in range(0, 10)))


为什么argmax只减少生成器表达式一次?

因为我没有所需的声誉金额,所以我将此添加为一个答案

正如@hpaulj所建议的,np.argmax在numeric.py中调用asarray函数。在这里,开发人员在代码中提到了这一点:

def asarray(a, dtype=None, order=None):
    """Convert the input to an array.

    Parameters
    ----------
    a : array_like
        Input data, in any form that can be converted to an array.  This
        includes lists, lists of tuples, tuples, tuples of tuples, tuples
        of lists and ndarrays.

因此,您的a不符合要求。还有为什么任何输入都返回零。此返回值来自函数

result = getattr(asarray(obj), method)(*args, **kwds)
在fromnumeric.py中,首先调用它。对于生成器对象,代码无法解析该方法,此函数可能会返回0作为默认值


这是我关于这个问题的研究

比较这两种表达方式:

In [682]: np.asarray([i for i in range(3)])
Out[682]: array([0, 1, 2])

In [683]: np.asarray(i for i in range(3))
Out[683]: array(<generator object <genexpr> at 0xb367bb9c>, dtype=object)
argmax
取决于它的输入是一个数组

np.array(I代表I…)做什么?许多numpy函数使用它,或
np.asarray
来确保它们使用数组。
In [682]: np.asarray([i for i in range(3)])
Out[682]: array([0, 1, 2])

In [683]: np.asarray(i for i in range(3))
Out[683]: array(<generator object <genexpr> at 0xb367bb9c>, dtype=object)
In [688]: np.fromiter((i for i in range(3)),int)
Out[688]: array([0, 1, 2])