Python numpy.max函数的作用是什么?
我接着写了一段代码如下:Python numpy.max函数的作用是什么?,python,numpy,max,Python,Numpy,Max,我接着写了一段代码如下: while numpy.max(abs(A - B)) > 0.01: 我试图用一些常规Python(数学?)函数替换numpy.max,但我找不到numpy.max的确切功能 我尝试过谷歌搜索,但我只发现: 我想这和numpy.max不一样 以及: 这也不是我需要的 有人知道我如何将这个numpy.max函数复制到一些标准python函数中吗 编辑:我正在使用Python 2.7numpy.max与numpy.amax是一样的: >>> im
while numpy.max(abs(A - B)) > 0.01:
我试图用一些常规Python(数学?)函数替换numpy.max
,但我找不到numpy.max
的确切功能
我尝试过谷歌搜索,但我只发现:
我想这和numpy.max不一样
以及:
这也不是我需要的
有人知道我如何将这个numpy.max函数复制到一些标准python函数中吗
编辑:我正在使用Python 2.7
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
>>>
及
请参见下面的演示:
>>> 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
>>>
在纯Python中不能很容易地复制
np.max
的行为,因为多维数组在Python中不是标准的。如果代码中的A
和B
就是这样的数组,最好保留NumPy函数
对于平面(一维)数组,Pythonmax
和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数组并返回最大值。(您还可以找到特定轴上的最大值,依此类推。)Pythonmax
无法做到这一点
要替换np.max
,需要在数组的轴上编写嵌套循环;有效地尝试在嵌套列表列表中查找最大值。这当然是可能的,但可能会非常缓慢:
>>> max([max(y) for y in x for x in a])
26
根据“numpy.max是由于历史原因而存在的”。请注意,这里的
yield from
依赖于Python 3.3或更高版本。OP没有说明他的版本,所以我更喜欢使用最新版本。但是,如果有人正在运行较旧的版本,只需将yield from
替换为普通的for循环:for i in flatte(item):yield i
。这是一个不错的选择,但大多数围绕NumPy构建的项目仍然在2.7上,并且将持续很长时间。NumPy本身现在在Python3中工作得很好,但是太多相关的库和工具都没有,这给许多以NumPy为中心的项目带来了严重的问题。谢谢您的回复。但现在我更困惑了,因为最初的A
和B
实际上是浮动的,而不是数组:@iCodez-这个函数似乎是为了处理数组或标量而编写的。在该代码示例中,EccenAnom
可以是数组,而不仅仅是标量。(请注意,函数的输入都记录为类似数组的对象。任何涉及时间或日期的内容都将是一个数组,例如,T1
)在旁注上,原因是np.min(2.0)
将返回标量(实际上是一个numpy浮点,而不是传入的python浮点)numpy函数被推广用于处理任何形状或大小的数组,包括长度为0的数组。这是整个努比的一种模式。没有理由在分钟内将其中断。
>>> 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
>>> max([max(y) for y in x for x in a])
26