I have a ndarray (Z) with some 500000 elements on a rectangular grid (X, Y).
Now I want to interpolate values at some 100 locations in x,y which are not necessarily
As your data is on a grid, you can use RectBivariateSpline.
To work with complex numbers, you can interpolate data.real and data.imag separately (the FITPACK routines IIRC don't handle complex data).
data.real
data.imag