我找到了一段代码:
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
答案 0 :(得分:5)
numpy.max
与numpy.amax
相同:
>>> import numpy
>>> numpy.max # Notice it says 'amax' in the output
<function amax at 0x0228B5D0>
>>> numpy.max is numpy.amax
True
>>>
或者,更具体地说,max
是amax
函数的别名。
此函数的目的在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
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中并不是标准的。如果代码中的A
和B
是这样的数组,那么最好保留NumPy函数。
对于平面(一维)数组,Python max
和np.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