home / github / issue_comments

Menu
  • GraphQL API
  • Search all tables

issue_comments: 119036789

This data as json

html_url issue_url id node_id user created_at updated_at author_association body reactions performed_via_github_app issue
https://github.com/pydata/xarray/issues/214#issuecomment-119036789 https://api.github.com/repos/pydata/xarray/issues/214 119036789 MDEyOklzc3VlQ29tbWVudDExOTAzNjc4OQ== 4383303 2015-07-07T00:51:04Z 2015-07-07T00:51:04Z NONE

+1 for this proposal.

I made a slight modification to @WeatherGod's code so that I could use string indices for the "station" coordinate, though I'm sure there is a better way to implement this. Also note the addition of a few list calls for Python 3 compat.

``` python def grid_to_points2(grid, points, coord_names): if not coord_names: raise ValueError("No coordinate names provided") spat_dims = {d for n in coord_names for d in grid[n].dims} not_spatial = set(grid.dims) - spat_dims spatial_selection = {n:0 for n in not_spatial} spat_only = grid.isel(**spatial_selection)

coords = bcast(spat_only, coord_names)

kd = KDTree(list(zip(*[c.ravel() for c in coords])))
_, indx = kd.query(list(zip(*[points[n].values for n in coord_names])))
indx = np.unravel_index(indx, coords[0].shape)

station_da = xray.DataArray(name='station', dims='station', data=stations.index.values)

return xray.concat(
        (grid.isel(**{n:j for n, j in zip(spat_only.dims, i)})
         for i in zip(*indx)),
        dim=station_da)

In [97]: stations = pd.DataFrame({'XLAT':[32.13, 32.43], 'XLONG':[-110.95, -112.02]}, index=['KTUS', 'KPHX']) stations Out[97]: XLAT XLONG KTUS 32.13 -110.95 KPHX 32.43 -112.02

In [98]: station_ds = grid_to_points2(ds, stations, ('XLAT', 'XLONG')) station_ds Out[98]: <xray.Dataset> Dimensions: (Times: 1681, station: 2) Coordinates: * Times (Times) datetime64[ns] 2015-07-02T06:00:00 ... XLAT (station) float32 32.1239 32.4337 * station (station) object 'KTUS' 'KPHX' west_east (station) int64 220 164 XLONG (station) float32 -110.947 -112.012 south_north (station) int64 116 134 Data variables: SWDNBRH (station, Times) float32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... V10 (station, Times) float32 -2.09897 -1.94047 -1.55494 ... V80 (station, Times) float32 0.0 -1.95921 -1.87583 -1.86289 ... SWDNB (station, Times) float32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... U10 (station, Times) float32 2.22951 1.89406 1.39955 1.04277 ... SWDDNI (station, Times) float32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... SWDNBC (station, Times) float32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... T2 (station, Times) float32 301.419 303.905 304.155 304.296 ... SWDDNIRH (station, Times) float32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... U80 (station, Times) float32 0.0 1.93936 1.7901 1.63011 1.69481 ...

In [100]: station_ds.sel(station='KTUS')[['U10','V10']] Out[100]: <xray.Dataset> Dimensions: (Times: 1681) Coordinates: west_east int64 220 south_north int64 116 XLONG float32 -110.947 * Times (Times) datetime64[ns] 2015-07-02T06:00:00 ... station object 'KTUS' XLAT float32 32.1239 Data variables: U10 (Times) float32 2.22951 1.89406 1.39955 1.04277 1.16338 ... V10 (Times) float32 -2.09897 -1.94047 -1.55494 -1.34216 ... ```

{
    "total_count": 1,
    "+1": 1,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
  40395257
Powered by Datasette · Queries took 0.625ms · About: xarray-datasette