A question about the performance of Nearest neighbour VS linear was asked in https://groups.google.com/forum/#!searchin/scitools-iris/performance/scitools-iris/HajdRLOZZQ4/ypy1FzbxtkMJ.
import iris
print iris.__version__
from iris.cube import Cube
from iris.coords import DimCoord
from iris.analysis.interpolate import extract_nearest_neighbour
from iris.analysis.trajectory import interpolate
import timeit
import numpy as np
def prepare_cube(n):
lat = DimCoord(np.linspace(-10,10,n), standard_name='latitude', units='degrees' )
lon = DimCoord(np.linspace(-10,10,n), standard_name='longitude', units='degrees', circular=True)
data = np.arange(n*n).reshape(n,n)
return Cube(data, dim_coords_and_dims=[(lon, 0), (lat, 1)])
cube = prepare_cube(3000)
1.8.0
%%timeit
extract_nearest_neighbour(cube, [('latitude', [0.1]), ('longitude', [0.1])])
1000 loops, best of 3: 1.29 ms per loop
%%timeit
interpolate(cube, [('latitude', [0.1]), ('longitude', [0.1])])
1 loops, best of 3: 105 ms per loop
With recent changes to iris, we seem to have made the difference worse:
import iris
print iris.__version__
from iris.cube import Cube
from iris.coords import DimCoord
from iris.analysis.interpolate import extract_nearest_neighbour
from iris.analysis.trajectory import interpolate
import timeit
import numpy as np
def prepare_cube(n):
lat = DimCoord(np.linspace(-10,10,n), standard_name='latitude', units='degrees' )
lon = DimCoord(np.linspace(-10,10,n), standard_name='longitude', units='degrees', circular=True)
data = np.arange(n*n).reshape(n,n)
return Cube(data, dim_coords_and_dims=[(lon, 0), (lat, 1)])
cube = prepare_cube(3000)
1.9.0-DEV
%%timeit
extract_nearest_neighbour(cube, [('latitude', [0.1]), ('longitude', [0.1])])
1000 loops, best of 3: 1.25 ms per loop
%%timeit
interpolate(cube, [('latitude', [0.1]), ('longitude', [0.1])])
1 loops, best of 3: 261 ms per loop
%%timeit
cube.interpolate([('latitude', [0.1]), ('longitude', [0.1])],
iris.analysis.Linear())
1 loops, best of 3: 229 ms per loop
%%timeit
cube.interpolate([('latitude', [0.1]), ('longitude', [0.1])],
iris.analysis.Nearest())
10 loops, best of 3: 95.7 ms per loop