技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
verde【数据与研究】Spatial data gridding and interpolation with a machine-learning style API. Process geographic and Cartesian point data onto regular grids. Use when the agent needs to: (1) Grid scattered spatial data onto regular grids, (2) Interpolate point data using splines, linear, or cubic methods, (3) Process geographic coordinates with projections, (4) Reduce …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
import verde as vd
# Basic gridding
spline = vd.Spline()
spline.fit(coordinates, values) # coordinates = (lon, lat) tuple
grid = spline.grid(spacing=0.1) # Returns xarray Dataset
# Access result
elevation = grid.elevation.values
# Save output
grid.to_netcdf('output.nc')
| Class | Purpose |
|---|---|
Spline | Bi-harmonic spline interpolation (smooth, good extrapolation) |
Linear | Delaunay triangulation (fast, no extrapolation) |
Cubic | Cubic interpolation (medium smoothness) |
Chain | Pipeline of processing steps |
BlockReduce | Decimate data to block means/medians |
Trend | Polynomial trend fitting and removal |
Vector | Grid 2-component vector data |
coordinates = (longitude, latitude) # Tuple of 1D arrays
values = elevation # 1D array
spline = vd.Spline()
spline.fit(coordinates, values)
grid = spline.grid(spacing=0.1, data_names=['elevation'])
import pyproj
projection = pyproj.Proj(proj='merc', lat_ts=data_lat.mean())
proj_coords = projection(longitude, latitude)
spline = vd.Spline()
spline.fit(proj_coords, values)
grid = spline.grid(spacing=1000) # 1000m spacing
import numpy as np
reducer = vd.BlockReduce(reduction=np.median, spacing=0.1)
coords_reduced, values_reduced = reducer.filter(coordinates, values)
trend = vd.Trend(degree=2) # Quadratic
trend.fit(coordinates, values)
residuals = values - trend.predict(coordinates)
# Grid residuals, then add trend back
chain = vd.Chain([
('trend', vd.Trend(degree=1)),
('reduce', vd.BlockReduce(np.median, spacing=0.05)),
('spline', vd.Spline())
])
chain.fit(coordinates, values)
grid = chain.grid(spacing=0.01)
spline = vd.Spline()
scores = vd.cross_val_score(spline, coordinates, values, cv=5)
print(f"Mean R2: {scores.mean():.3f}")
grid = spline.grid(spacing=0.1)
mask = vd.distance_mask(coordinates, maxdist=0.2, grid=grid)
grid_masked = grid.where(mask)
| Parameter | Description |
|---|---|
spacing | Grid cell size (same units as coordinates) |
region | (west, east, south, north) bounds |
shape | (n_north, n_east) grid dimensions |
adjust | 'spacing' or 'region' - which to adjust for exact fit |
| Gridder | Speed | Smoothness | Extrapolation |
|---|---|---|---|
Spline | Medium | High | Good |
Linear | Fast | Low | None |
Cubic | Fast | Medium | None |
| Use Case | Tool | Why |
|---|---|---|
| General spatial gridding | Verde | ML-style API, pipelines, cross-validation |
| Basic 1D/2D interpolation | scipy.interpolate | Simpler API, no spatial focus |
| Potential field gridding | Harmonica | Equivalent sources designed for gravity/magnetics |
| Command-line batch gridding | GMT | Powerful CLI, good for automation scripts |
| Geostatistical interpolation | scikit-gstat / pykrige | Variogram-based with uncertainty |
| Very large datasets (10M+ pts) | GMT / GDAL | Better memory handling at scale |
| Vector data (GPS velocities) | Verde (Vector) | Built-in 2-component vector gridding |
| Trend removal + gridding | Verde (Chain) | Pipeline combines steps cleanly |
Choose Verde when: You need a Pythonic, scikit-learn-style API for gridding scattered spatial data with built-in cross-validation, trend removal, and pipelines. Ideal for exploratory analysis and reproducible workflows.
Choose scipy.interpolate when: You have a simple interpolation task without spatial coordinates, projections, or need for validation.
Choose GMT when: You need command-line batch processing of large datasets or
are integrating with shell-based workflows and need surface or nearneighbor.
BlockReduce to decimate dense clustersTrend(degree=1) or Trend(degree=2)cross_val_score()Spline(damping=...) or Spline(mindist=...) based on CV scores.grid()distance_mask() to clip extrapolation artifactsgrid.elevation.plot()grid.to_netcdf()| Issue | Solution |
|---|---|
| Poor extrapolation | Use distance_mask() to mask far from data |
| Slow with large data | Use BlockReduce first |
| Regional trends | Remove with Trend before gridding |
| Wrong spacing | Check coordinate units (degrees vs meters) |