Build fieldlist from dicts in a loop
Distinct latitudes/longitudes
In this example each field is defined by a dict using generic metadata keys. The latitudes and longitudes specified as disctinct values, the 2D field geometry will be automatically built from them.
[1]:
prototype = {
"latitudes": [10.0, 0.0, -10.0],
"longitudes": [20, 40.0],
"values": [1, 2, 3, 4, 5, 6],
"valid_datetime": "2018-08-01T09:00:00Z",
}
d = [
{"param": "t", "level": 500, **prototype},
{"param": "t", "level": 850, **prototype},
{"param": "u", "level": 500, **prototype},
{"param": "u", "level": 850, **prototype},
{"param": "d", "level": 850, **prototype},
{"param": "d", "level": 600, **prototype},
]
Create a fieldlist from the data above in a loop.
[2]:
from earthkit.data import ArrayField
from earthkit.data import SimpleFieldList
ds = SimpleFieldList()
for f in d:
ds.append(ArrayField(f["values"], f))
[3]:
ds.ls()
[3]:
| param | level | base_datetime | valid_datetime | step | number | |
|---|---|---|---|---|---|---|
| 0 | t | 500 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 1 | t | 850 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 2 | u | 500 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 3 | u | 850 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 4 | d | 850 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 5 | d | 600 | None | 2018-08-01T09:00:00+00:00 | None | None |
[4]:
ds[0].to_latlon()
[4]:
{'lat': array([[ 10., 10.],
[ 0., 0.],
[-10., -10.]]),
'lon': array([[20., 40.],
[20., 40.],
[20., 40.]])}
[5]:
ds[0].grid_points()
[5]:
(array([ 10., 10., 0., 0., -10., -10.]),
array([20., 40., 20., 40., 20., 40.]))
[6]:
ds.to_numpy()
[6]:
array([[[1, 2],
[3, 4],
[5, 6]],
[[1, 2],
[3, 4],
[5, 6]],
[[1, 2],
[3, 4],
[5, 6]],
[[1, 2],
[3, 4],
[5, 6]],
[[1, 2],
[3, 4],
[5, 6]],
[[1, 2],
[3, 4],
[5, 6]]])
[7]:
ds.metadata("level")
[7]:
[500, 850, 500, 850, 850, 600]
[8]:
ds[0].metadata().valid_datetime()
[8]:
datetime.datetime(2018, 8, 1, 9, 0, tzinfo=tzutc())
[9]:
ds[0].mars_grid
[9]:
[20.0, 10.0]
[10]:
ds.sel(param="t").ls()
[10]:
| param | level | base_datetime | valid_datetime | step | number | |
|---|---|---|---|---|---|---|
| 0 | t | 500 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 1 | t | 850 | None | 2018-08-01T09:00:00+00:00 | None | None |
[11]:
ds.order_by("level").ls()
[11]:
| param | level | base_datetime | valid_datetime | step | number | |
|---|---|---|---|---|---|---|
| 0 | t | 500 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 1 | u | 500 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 2 | d | 600 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 3 | t | 850 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 4 | u | 850 | None | 2018-08-01T09:00:00+00:00 | None | None |
| 5 | d | 850 | None | 2018-08-01T09:00:00+00:00 | None | None |
[ ]: