是否有任何功能可以在2D阵列中找到第二个最小值或最大值?

时间:2016-04-04 19:57:26

标签: python-2.7

我有一个2D数组,

a= [[ 1  5  9]
 [ 5  8  9]
 [-9  6  2]]

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

if(np.amin(a)== pad):
      min = 1

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

k = [-999. -999. -999. -999.   43.   40. -999.   14.   15.]

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

k = [-999. -999. -999. -999. -999. 14.   15. 40. 43.]
min = 14

更新1

nodatavalue = -999.0
if(np.amin(k) == nodatavalue): 
      np.amin(np.array(a)[a != np.amin(a)]) 
else: 
       np.amin(k)

1 个答案:

答案 0 :(得分:3)

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

np.amin(np.array(a)[a != np.amin(a)])

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

np.amin(a[a != np.amin(a)])

编辑:如果要在忽略特定值的同时找到最小值,可以使用该值生成索引数组:

np.amin(a[a != nodatavalue])

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