Recently, I face a quite simple problem : I have an array A (100,200) containing values I want to interpolate and I have another array I (5000), containing interpolated values. How to efficiently find tthe closest interpolated values of rach elements of A in I ?
That post give me 90% of the answer. It details how to efficiently find the index of a single value v into an array arr. The one line magic formula is :
idx = (np.abs(arr - v)).argmin()
but here v is a number and arr is a 1 dimensional array. How my problem can fit in that solution ?
By using broadcasting of course !
I must find for each dimensions of my array the one which fits the values of I. So the solution of my problem is :
idx = (np.abs(A - I[:,None,None])).argmin(axis=0)
Hence idx is idx.shape == A.shape, and it contains indexes where I has the closest values of A.