Trouver l'élément d'une matrice le plus proche d'une valeur donnée sous python


Exemples de comment trouver l'élément d'une matrice le plus proche d'une valeur donnée sous python

Tableau 1D

Cas d'une matrice à une dimension

>>> import numpy as np
>>> value = 0.5
>>> A = np.random.random(10)
>>> A
array([ 0.47009242,  0.40242778,  0.02064198,  0.47456175,  0.83500227,
        0.53205104,  0.14001715,  0.86691798,  0.78473226,  0.91123132])
>>> idx = (np.abs(A-value)).argmin()
>>> idx
3
>>> A[idx]
0.47456175235592957

Tableau 2D

Cas d'une matrice à plusieurs dimensions

>>> A = np.random.random((4,4))
>>> A
array([[ 0.81497314,  0.63329046,  0.53912919,  0.19661354],
       [ 0.71825277,  0.61201976,  0.0530397 ,  0.39322394],
       [ 0.41617287,  0.00585574,  0.26575708,  0.39457519],
       [ 0.25185766,  0.06262629,  0.69224089,  0.89490705]])
>>> X = np.abs(A-value)
>>> idx = np.where( X == X.min() )
>>> idx
(array([0]), array([2]))
>>> A[idx[0], idx[1]]
array([ 0.53912919])
>>>

Autre exemple:

>>> value = [0.2, 0.5]
>>> A = np.random.random((4,4))
>>> A
array([[ 0.36520505,  0.91383364,  0.36619464,  0.14109792],
       [ 0.19189167,  0.10502695,  0.39406069,  0.04107304],
       [ 0.96210652,  0.5862801 ,  0.12737704,  0.33649882],
       [ 0.91871859,  0.95923748,  0.4919818 ,  0.72398577]])
>>> B = np.random.random((4,4))
>>> B
array([[ 0.61142891,  0.90416306,  0.07284985,  0.86829844],
       [ 0.2605821 ,  0.48856753,  0.55040045,  0.65854238],
       [ 0.83943169,  0.64682588,  0.50336359,  0.90680018],
       [ 0.82432453,  0.10485762,  0.6753372 ,  0.77484694]])
>>> X = np.sqrt( np.square( A - value[0] ) +  np.square( B - value[1] ) )
>>> idx = np.where( X == X.min() )
>>> idx
(array([2]), array([2]))
>>> A[idx[0], idx[1]]
array([ 0.12737704])
>>> B[idx[0], idx[1]]
array([ 0.50336359])

Références