是否有任何函数可以在二维数组中找到第二个最小值或最大值?

AN_*_*_SH 3 python-2.7

我有一个二维数组,

a= [[ 1  5  9]
 [ 5  8  9]
 [-9  6  2]]
Run Code Online (Sandbox Code Playgroud)

我想在这个数组中找到第二个最小或最大数字。例如 pad = -9 这是这个数组中的最小值,我想得到最小值 = 1。例如。

if(np.amin(a)== pad):
      min = 1
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个返回第二个最小值的行函数。它也应该能够在以下情况下找到答案:

k = [-999. -999. -999. -999.   43.   40. -999.   14.   15.]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当我们排序时

k = [-999. -999. -999. -999. -999. 14.   15. 40. 43.]
min = 14
Run Code Online (Sandbox Code Playgroud)

更新 1

nodatavalue = -999.0
if(np.amin(k) == nodatavalue): 
      np.amin(np.array(a)[a != np.amin(a)]) 
else: 
       np.amin(k)
Run Code Online (Sandbox Code Playgroud)

tza*_*man 7

由于您使用的是 numpy:a != np.amin(a)将为您提供所有不等于最小值的元素的索引数组。您可以使用它来屏蔽最小值,然后调用amin被屏蔽的数组来获得答案:

np.amin(np.array(a)[a != np.amin(a)])
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的输入是 numpy 数组(而不是 python 列表),则不需要额外调用np.array,只需:

np.amin(a[a != np.amin(a)])
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想在不考虑特定值的同时找到最小值,您可以只使用该值来生成索引数组:

np.amin(a[a != nodatavalue])
Run Code Online (Sandbox Code Playgroud)

请注意,如果您在问题中第一次询问您实际需要什么,这会有所帮助。请参阅如何询问有关编写有用且清晰的问题的提示!