从数组中的最小值获取下一个值
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
不会对整个数组进行排序,而是简单地交换值,直到所有较小的值都在给定索引的左侧,而所有较大的值都在右侧。
请注意,如果最小值不是唯一的,结果会有所不同——但在这种情况下,您的问题并不清楚您想要哪种输出。
我有一张图片,它是一个数组。我想得到最小值后的值,希望你能理解我,因为我英语说得不太好。 此图像的像素中的最小值为 -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
不会对整个数组进行排序,而是简单地交换值,直到所有较小的值都在给定索引的左侧,而所有较大的值都在右侧。
请注意,如果最小值不是唯一的,结果会有所不同——但在这种情况下,您的问题并不清楚您想要哪种输出。