【发布时间】:2020-12-05 18:22:32
【问题描述】:
对于我拥有的一组矩阵,称为 distance_matrix(它们存在于一个函数中,然后在给定范围内生成所有这些矩阵)。我需要在这个矩阵中找到最小值,显然是由一个索引对表示的,为此我有这个代码:
min_indices = np.unravel_index(np.argmin(np.abs(distance_matrix)),np.shape(distance_matrix))
这很好用。但是现在我需要写一些东西,如果上面代码返回的索引是(0,0),则找到第二低的值。我想我不能使用上面的代码,因为你不能修改它来找到下一个值(据我所知)。我尝试过使用 if 循环,但效果不太好:
sdiff = np.diff(np.sign(np.diff(distance_matrix)))
rising_1 = (sdiff == 2)
rising_2 = (sdiff[:-1] == 1) & (sdiff[1:] == 1)
rising_all = rising_1
rising_all[1:] = rising_all[1:] | rising_2
min_ind = np.where(rising_all)[0] + 1
minima = list(zip(min_ind, distance_matrix[min_ind]))
for ind_pair in range(0,len(minima)):
if ind_pair ==(0,0):
minima=sorted(minima, key=lambda pair: pair[1])[1]
else:
minima=sorted(minima, key=lambda pair: pair[1])[0]
【问题讨论】:
-
首先使用 s = np.sort(original.ravel()) 对数组进行排序。然后找到第 k 个最小值。使用 np.where(original==required_num) 找到它的索引
-
@GirishDattatrayHegde。或者使用 argsort 并只跟踪索引。更好的是,使用 argpartition
-
@Mad Physicist 是的,这更好
标签: python numpy loops sorting iteration