3 votes

Obtenir l'indice d'un tableau Numpy

J'ai un tableau numpy :

arr = [0.23, 2.32, 4.04, 5.02, 6.84, 10.12, 10.34, 11.93,12.44]

Je veux obtenir l'indice de l'entier le plus proche que je saisis. Par exemple, si je saisis 10, je devrais obtenir l'indice 5 (10.12) ou si je saisis 12, je devrais obtenir l'indice 7 (11.93).

2voto

coldspeed Points 111053

Si votre liste n'est pas triée, vous aurez besoin d'une solution en temps linéaire en utilisant abs + argmin :

>>> np.abs(np.array(arr) - 12).argmin()
7

Cependant, si votre liste est triée (ascendante ou descendante), vous pouvez utiliser la recherche binaire pour obtenir une solution en temps sous-linéaire (très rapide) :

# https://ideone.com/aKEpI2 — improved by @user2357112
def binary_search(arr, val):
    # val must be in the closed interval between arr[i-1] and arr[i],
    # unless one of i-1 or i is beyond the bounds of the array.
    i = np.searchsorted(arr, val)

    if i == 0:
        # Smaller than the smallest element
        return i
    elif i == len(arr):
        # Bigger than the biggest element
        return i - 1
    elif val - arr[i - 1] <= arr[i] - val:
        # At least as close to arr[i - 1] as arr[i]
        return i - 1

    # Closer to arr[i] than arr[i - 1]
    return i

cases = [10, 12, 100, 10.12]   # 5, 7, 8, 5
print(*[binary_search(arr, c) for c in cases], sep=',')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X