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
[ ]: