Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
831 views
in Technique[技术] by (71.8m points)

optimization - storing the weights used by scipy griddata for re-use

I am trying to interpolate data from an unstructured mesh M1 to another unstructured mesh M2. For this, scipy.interpolate.griddata seems good.

However, I will need to interpolate many times from M1 to M2, changing only the data not the meshes. I guess that, internally, the scipy.interpolate.griddata defines some weight coefficients when interpolating from M1 to M2 and that this may be one of the expensive parts of the computation.

Therefore, I would like to avoid re-compute these weigths each time. Is there a way to do this? I.e., interpolating many times from one unstructured mesh to another unstructured mesh, both kept constant, avoiding to re-compute the internals of scipy.interpolate.griddata (or equivalent)?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

A solution is to use the LinearNDInterpolator Scipy function with a pre-computed Delaunay triangulation:

from scipy.spatial import Delaunay
from scipy.interpolate import LinearNDInterpolator

tri = Delaunay(mesh1)  # Compute the triangulation

# Perform the interpolation with the given values:
interpolator = LinearNDInterpolator(tri, values_mesh1)
values_mesh2 = interpolator(mesh2)

mesh1 is a (number of points * dim) array.

Note: CloughTocher2DInterpolator could be used for non-linear interpolation. griddata uses either LinearNDInterpolator or CloughTocher2DInterpolator.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...