从数组中的最小值获取下一个值

Get the next value from the minimum value in array

我有一张图片,它是一个数组。我想得到最小值后的值,希望你能理解我,因为我英语说得不太好。 此图像的像素中的最小值为 -3.40282e+38。我想知道 -3.40282e+38.

之后的值

它必须是例如 0.3 0.4..

我尝试使用 image.min() 但它打印 -3.40282e+38 ..我需要它的下一个值。

我也试过了

 minimo = img.min()
for i in range(rows):
 for j in range(cols):
     for k in img[i,j]:
          if k> minimo:
               print k.min()

但我遇到了这个错误

 TypeError: 'numpy.float32' object is not iterable

你可以这样做:

import numpy as np
sorted_vec = np.unique(img.reshape(-1))
second_smallest = sorted_vec[1]

对于大型数组,使用 np.partition 比排序数组快得多,如 :

import numpy as np
img = np.random.rand(1000, 1000)

# Compute via a full sort
np.unique(img.ravel())[1]
# 3.25658401967e-06

# Compute via a partition
np.partition(img.ravel(), 1)[1]
# 3.25658401967e-06

这两种方法给出了相同的结果,我们可以看到分区方法明显更快:

%timeit np.unique(img.ravel())[1]
# 10 loops, best of 3: 86.8 ms per loop

%timeit np.partition(img.ravel(), 1)[1]
# 100 loops, best of 3: 4.99 ms per loop

速度的原因是 partition 不会对整个数组进行排序,而是简单地交换值,直到所有较小的值都在给定索引的左侧,而所有较大的值都在右侧。

请注意,如果最小值不是唯一的,结果会有所不同——但在这种情况下,您的问题并不清楚您想要哪种输出。