numpy.max函数有什么作用?

时间:2014-11-07 21:07:59

标签: python numpy max

我找到了一段代码:

while numpy.max(abs(A - B)) > 0.01:

我试图用一些常规的Python(数学?)函数替换numpy.max,但我找不到numpy.max到底做了什么。

我尝试使用谷歌搜索,但我只发现: numpy.maximum这与我想的numpy.max不同。

和: numpy.amax这也不是我需要的。

有谁知道如何将这个numpy.max功能复制到一些标准的python中?

编辑:我使用的是Python 2.7

2 个答案:

答案 0 :(得分:5)

numpy.maxnumpy.amax相同:

>>> import numpy
>>> numpy.max # Notice it says 'amax' in the output
<function amax at 0x0228B5D0>
>>> numpy.max is numpy.amax
True
>>>

或者,更具体地说,maxamax函数的别名。

此函数的目的在docs link中列出,但它似乎主要用于查找numpy.array内的最大值,而不管它有多少嵌套级别。您可以使用一个简单的函数来模仿此行为以展平列表:

def flatten(lst):
    for item in lst:
        if isinstance(item, list):
            # Use 'yield from flatten(item)' in Python 3.3 or greater
            for sub_item in flatten(item):
                yield sub_item
        else:
            yield item

built-in max function

max(flatten(my_list))

参见下面的演示:

>>> def flatten(lst):
...     for item in lst:
...         if isinstance(item, list):
...             for sub_item in flatten(item):
...                 yield sub_item
...         else:
...             yield item
...
>>> array = [[1, 2, 3], [4, 5, 6]]
>>> max(flatten(array))
6
>>>

答案 1 :(得分:1)

您无法在纯Python中轻松复制np.max的行为,因为多维数组在Python中并不是标准的。如果代码中的AB是这样的数组,那么最好保留NumPy函数。

对于平面(一维)数组,Python maxnp.max做同样的事情并且可以交换:

>>> a = np.arange(27)
>>> max(a)
26
>>> np.max(a)
26

对于具有多个维度的数组,max无法工作:

>>> a = a.reshape(3, 3, 3)
>>> max(a)
ValueError: The truth value of an array with more than one element is ambiguous [...]
>>> np.max(a)
26

默认情况下,np.max会使3D数组变平并返回最大值。 (您还可以在特定轴上找到最大值,依此类推。)Python max无法执行此操作。

要替换np.max,您需要在数组的轴上编写嵌套循环;有效地尝试在嵌套列表列表中找到最大值。这当然是可能的,但可能会非常缓慢:

>>> max([max(y) for y in x for x in a])
26