我有一个图像,它是一个数组。我希望得到最小值后的价值,我希望你理解我,因为我不会说英语。 此图像的像素中的最小值为-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
答案 0 :(得分:2)
你可以这样做:
import numpy as np
sorted_vec = np.unique(img.reshape(-1))
second_smallest = sorted_vec[1]
答案 1 :(得分:1)
对于大型数组,使用np.partition
将比排序数组快得多,如@dslack's answer中所示:
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
不对整个数组进行排序,而只是交换值,直到所有较小的值都在给定索引的左边,而所有较大的值都在右边。
请注意,如果最小值不是唯一的,结果会有所不同 - 但是在您的问题中,您不清楚在这种情况下您想要哪个输出。