dimanche 16 août 2020

Script in function to write find second smallest value if smallest value fulfills a particular condition

For a set of matrices that I have, called distance_matrix (these exist in a function that then generates all of them over a given range). I need to find the smallest value in this matrix, obviously notated by an index pair,for which i have this code:

min_indices = np.unravel_index(np.argmin(np.abs(distance_matrix)),np.shape(distance_matrix))

This works perfectly well. But now i need to write something that finds the second lowest value if the indices returned by the above code is (0,0). I guess i cant use the code above, since you cant modify it to find the next value (as far as i can tell). Ive tried with an if-loop, but thats not quite working:

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]

Aucun commentaire:

Enregistrer un commentaire