diff --git "a/make_conv_train.ipynb" "b/make_conv_train.ipynb" --- "a/make_conv_train.ipynb" +++ "b/make_conv_train.ipynb" @@ -22,10 +22,24 @@ "id": "d615f835", "metadata": {}, "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8af2324c357f4c16910329aaf3247544", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 2, @@ -54,452 +68,25 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "cf514138", "metadata": {}, "outputs": [], "source": [ "filename = 'BedMachineAntarctica-v3.nc'\n", "sat_im = rxr.open_rasterio(filename)\n", - "transform = sat_im.rio.transform()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "7cc14869", - "metadata": {}, - "outputs": [], - "source": [ - "tab = con.read_parquet('bedmap_train2_30m.parquet')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "0fec2bb7", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "0dae1027ada7475b8c194923c425073c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Let's create a dummy GeoPandas DataFrame for demonstration\n", - "num_points = 100_000\n", - "frac_points = num_points/30_000_000\n", - "# Generate random points within a reasonable Antarctica extent (approx for EPSG:3031)\n", - "# min_x, max_x = -2000000, 2000000\n", - "# min_y, max_y = -2000000, 2000000\n", - "# random_x = np.random.uniform(min_x, max_x, num_points)\n", - "# random_y = np.random.uniform(min_y, max_y, num_points)\n", - "# ice_thickness_data = np.random.uniform(100, 5000, num_points) # Example ice thickness\n", - "# v_data = np.random.uniform(0, 1, num_points) # Example velocity\n", - "# temp_data = np.random.uniform(0, 1000, num_points) # Example temperature\n", - "\n", - "# gdf = gpd.GeoDataFrame(\n", - "# {'ice_thickness': ice_thickness_data,\n", - "# 'v': v_data,\n", - "# 'temp': temp_data\n", - "# },\n", - "# geometry=gpd.points_from_xy(random_x, random_y),\n", - "# crs=\"EPSG:3031\"\n", - "# )\n", - "data = tab.drop(['LON','LAT'])\n", - "random_data = data.sample(frac_points)\n", - "\n", - "# 3.1. Create a spatial index for your GeoDataFrame\n", - "gdf = random_data.to_pandas()\n", - "gdf.crs = \"EPSG:3031\"\n", - "gdf_sindex = gdf.sindex" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "ae2f315d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
THICKgeometryEASTNORTHvxvyvith_bmsmbzstemp
01064.24POINT (-413937.178 826713.054)-4.139372e+058.267131e+05-2.6192733.0842454.046376954.49087362.6446071162.2798390.007977244.021857
11193.70POINT (1671948.79 -1896344.349)1.671949e+06-1.896344e+0631.064121-41.05727351.4847481211.514173451.2637551203.7774960.015953252.699878
21552.96POINT (-1258929.617 -809646.847)-1.258930e+06-8.096468e+05-2.9243428.9538499.4192981663.638829490.4541612100.5457930.003695246.286919
31264.70POINT (-844998.401 333006.309)-8.449984e+053.330063e+05-2.674579-1.2639692.9582071259.694288145.535283345.6540520.004805246.782685
42000.78POINT (-735958.864 48154.371)-7.359589e+054.815437e+04-3.4509945.5021956.4948842022.433247132.7013611458.3152690.002991243.095592
.......................................
997612024.41POINT (-1070869.73 36219.135)-1.070870e+063.621913e+04-6.5109584.8010568.0896671676.777041202.6113961739.4567180.009819243.995007
997622787.40POINT (919130.388 -1668408.781)9.191304e+05-1.668409e+060.308528-1.3885301.4223942820.33116185.1789352181.5612620.002284234.099728
99763785.40POINT (2292737.808 -1064316.615)2.292738e+06-1.064317e+06-167.424091-27.102104169.603509796.5791131294.093330212.0719620.048592258.157311
997642452.89POINT (-1387664.803 -630194.489)-1.387665e+06-6.301945e+05-43.76326647.03347164.2446172506.279739738.1074991219.7768640.004550249.767054
997651680.48POINT (539623.208 -1053727.718)5.396232e+05-1.053728e+06-4.670764-1.0804574.7941031509.64915631.2536872153.8994260.008152234.451772
\n", - "

99766 rows × 12 columns

\n", - "
" - ], - "text/plain": [ - " THICK geometry EAST NORTH \\\n", - "0 1064.24 POINT (-413937.178 826713.054) -4.139372e+05 8.267131e+05 \n", - "1 1193.70 POINT (1671948.79 -1896344.349) 1.671949e+06 -1.896344e+06 \n", - "2 1552.96 POINT (-1258929.617 -809646.847) -1.258930e+06 -8.096468e+05 \n", - "3 1264.70 POINT (-844998.401 333006.309) -8.449984e+05 3.330063e+05 \n", - "4 2000.78 POINT (-735958.864 48154.371) -7.359589e+05 4.815437e+04 \n", - "... ... ... ... ... \n", - "99761 2024.41 POINT (-1070869.73 36219.135) -1.070870e+06 3.621913e+04 \n", - "99762 2787.40 POINT (919130.388 -1668408.781) 9.191304e+05 -1.668409e+06 \n", - "99763 785.40 POINT (2292737.808 -1064316.615) 2.292738e+06 -1.064317e+06 \n", - "99764 2452.89 POINT (-1387664.803 -630194.489) -1.387665e+06 -6.301945e+05 \n", - "99765 1680.48 POINT (539623.208 -1053727.718) 5.396232e+05 -1.053728e+06 \n", - "\n", - " vx vy v ith_bm smb \\\n", - "0 -2.619273 3.084245 4.046376 954.490873 62.644607 \n", - "1 31.064121 -41.057273 51.484748 1211.514173 451.263755 \n", - "2 -2.924342 8.953849 9.419298 1663.638829 490.454161 \n", - "3 -2.674579 -1.263969 2.958207 1259.694288 145.535283 \n", - "4 -3.450994 5.502195 6.494884 2022.433247 132.701361 \n", - "... ... ... ... ... ... \n", - "99761 -6.510958 4.801056 8.089667 1676.777041 202.611396 \n", - "99762 0.308528 -1.388530 1.422394 2820.331161 85.178935 \n", - "99763 -167.424091 -27.102104 169.603509 796.579113 1294.093330 \n", - "99764 -43.763266 47.033471 64.244617 2506.279739 738.107499 \n", - "99765 -4.670764 -1.080457 4.794103 1509.649156 31.253687 \n", - "\n", - " z s temp \n", - "0 1162.279839 0.007977 244.021857 \n", - "1 1203.777496 0.015953 252.699878 \n", - "2 2100.545793 0.003695 246.286919 \n", - "3 345.654052 0.004805 246.782685 \n", - "4 1458.315269 0.002991 243.095592 \n", - "... ... ... ... \n", - "99761 1739.456718 0.009819 243.995007 \n", - "99762 2181.561262 0.002284 234.099728 \n", - "99763 212.071962 0.048592 258.157311 \n", - "99764 1219.776864 0.004550 249.767054 \n", - "99765 2153.899426 0.008152 234.451772 \n", - "\n", - "[99766 rows x 12 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gdf" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "8cd3bb9e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "99766" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(gdf)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "9f8614bd", - "metadata": {}, - "outputs": [], - "source": [ - "size = 27 #pixels\n", - "half = size // 2\n", - "\n", - "images = []\n", - "im_data = {}\n", - "\n", - "scalar_feats = ['THICK', 'vx', 'vy', 'v', 'smb', 'z', 's', 'temp']\n", - "\n", - "for sclr in scalar_feats:\n", - " im_data[sclr] = []\n", - "\n", - "\n", - "for idx, data_row in gdf.iterrows():\n", - " geom = data_row.geometry\n", - "\n", - " col, row = ~transform * (geom.x, geom.y) #Pixel coordinates\n", - " col, row = int(np.floor(col)), int(np.floor(row))\n", - "\n", - " patch = sat_im.surface.isel(\n", - " y=slice(row-half, row+half+1),\n", - " x=slice(col-half, col+half+1)\n", - " )\n", - "\n", - " image = xr.DataArray(\n", - " patch[0].values,\n", - " coords = {\n", - " \"x\": np.arange(size),\n", - " \"y\": np.arange(size)\n", - " },\n", - " dims = (\"x\", \"y\"),\n", - " name = \"z_image\"\n", - " )\n", - "\n", - " images.append(image)\n", - " for sclr in scalar_feats:\n", - " im_data[sclr].append(data_row[sclr])\n", - "\n", - "sc = np.arange(len(gdf))\n", - "\n", - "# Create a DataArray for all images\n", - "all_images_da = xr.concat(images, dim = 'sample')\n", - "all_images_da['sample'] = sc # Add sample coordinates\n", - "\n", - "scalars_ds = xr.Dataset(\n", - " {\n", - " 'vx': xr.DataArray(np.array(im_data['vx']), coords = {'sample': sc}, dims = ('sample',), name = 'vx'),\n", - " 'vy': xr.DataArray(np.array(im_data['vy']), coords = {'sample': sc}, dims = ('sample',), name = 'vy'),\n", - " 'v': xr.DataArray(np.array(im_data['v']), coords = {'sample': sc}, dims = ('sample',), name = 'v'),\n", - " 'smb': xr.DataArray(np.array(im_data['smb']), coords = {'sample': sc}, dims = ('sample',), name = 'smb'),\n", - " 'z': xr.DataArray(np.array(im_data['z']), coords = {'sample': sc}, dims = ('sample',), name = 'z'),\n", - " 's': xr.DataArray(np.array(im_data['s']), coords = {'sample': sc}, dims = ('sample',), name = 's'),\n", - " 'temp': xr.DataArray(np.array(im_data['temp']), coords = {'sample': sc}, dims = ('sample',), name = 'temp')\n", - " },\n", - " coords = {'sample': sc}\n", - ")\n", - "\n", - "# Create DataArrays for labels and scalar features, aligning with the 'sample' dimension\n", - "labels_da = xr.DataArray(\n", - " np.array(im_data[\"THICK\"]),\n", - " coords={\"sample\": sc},\n", - " dims=(\"sample\",),\n", - " name=\"label\"\n", - ")\n", - "\n", - "# Combine everything into a single Dataset\n", - "training_data_ds = xr.Dataset(\n", - " {\n", - " \"images\": all_images_da,\n", - " \"labels\": labels_da\n", - " },\n", - " coords={\"sample\": sc}, # Add sample coordinates from scalar_features_ds\n", - " # name = \"Elevation images, with labels and scarlars\",\n", - " attrs={'description': 'CNN data with elevation images. Scalar features are everything from Niccolo 30M parquet.\\\n", - " Images are 27x27 pixels.'}\n", - ")\n", + "transform = sat_im.rio.transform()\n", "\n", - "training_data_ds = training_data_ds.merge(scalars_ds)" + "# filename = 'antarctic_ice_vel_phase_map_v01.nc'\n", + "# vel = rxr.open_rasterio(filename)\n", + "# vx_transform = vel.VX.rio.transform()\n", + "# vy_transform = vel.VY.rio.transform()" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "6cc1c242", + "execution_count": 5, + "id": "7f98b578", "metadata": {}, "outputs": [ { @@ -875,135 +462,693 @@ " stroke: currentColor;\n", " fill: currentColor;\n", "}\n", - "
<xarray.Dataset> Size: 298MB\n",
-       "Dimensions:  (x: 27, y: 27, sample: 99766)\n",
+       "
<xarray.Dataset> Size: 7GB\n",
+       "Dimensions:       (band: 1, x: 12445, y: 12445)\n",
        "Coordinates:\n",
-       "  * x        (x) int64 216B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n",
-       "  * y        (y) int64 216B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n",
-       "  * sample   (sample) int64 798kB 0 1 2 3 4 5 ... 99761 99762 99763 99764 99765\n",
+       "  * band          (band) int64 8B 1\n",
+       "  * x             (x) float64 100kB -2.8e+06 -2.8e+06 ... 2.799e+06 2.8e+06\n",
+       "  * y             (y) float64 100kB 2.8e+06 2.8e+06 ... -2.799e+06 -2.8e+06\n",
+       "    spatial_ref   int64 8B 0\n",
+       "    coord_system  int64 8B 0\n",
        "Data variables:\n",
-       "    images   (sample, x, y) float32 291MB 1.093e+03 1.093e+03 ... 2.133e+03\n",
-       "    labels   (sample) float64 798kB 1.064e+03 1.194e+03 ... 2.453e+03 1.68e+03\n",
-       "    vx       (sample) float64 798kB -2.619 31.06 -2.924 ... -167.4 -43.76 -4.671\n",
-       "    vy       (sample) float64 798kB 3.084 -41.06 8.954 ... -27.1 47.03 -1.08\n",
-       "    v        (sample) float64 798kB 4.046 51.48 9.419 ... 169.6 64.24 4.794\n",
-       "    smb      (sample) float64 798kB 62.64 451.3 490.5 ... 1.294e+03 738.1 31.25\n",
-       "    z        (sample) float64 798kB 1.162e+03 1.204e+03 ... 1.22e+03 2.154e+03\n",
-       "    s        (sample) float64 798kB 0.007977 0.01595 ... 0.00455 0.008152\n",
-       "    temp     (sample) float64 798kB 244.0 252.7 246.3 ... 258.2 249.8 234.5\n",
-       "Attributes:\n",
-       "    description:  CNN data with elevation images. Scalar features are everyth...
  • y
    PandasIndex
    PandasIndex(Index([ 2800000.0,  2799550.0,  2799100.0,  2798650.0,  2798200.0,  2797750.0,\n",
    +       "        2797300.0,  2796850.0,  2796400.0,  2795950.0,\n",
    +       "       ...\n",
    +       "       -2795750.0, -2796200.0, -2796650.0, -2797100.0, -2797550.0, -2798000.0,\n",
    +       "       -2798450.0, -2798900.0, -2799350.0, -2799800.0],\n",
    +       "      dtype='float64', name='y', length=12445))
  • cdm_data_type :
    Grid
    comment :
    Conventions :
    CF-1.6
    creator_name :
    J. Mouginot
    date_created :
    2019-07-08T14:43:24.00005131959583Z
    geospatial_lat_max :
    -60
    geospatial_lat_min :
    -90
    geospatial_lat_units :
    degrees_north
    geospatial_lon_max :
    180
    geospatial_lon_min :
    -180
    geospatial_lon_units :
    degrees_east
    id :
    v_mix.v8Jul2019.nc
    institution :
    Department of Earth System Science, University of California, Irvine, CA, USA; Univ. Grenoble Alpes, CNRS, IRD, Grenoble INP, IGE, 38000 Grenoble, France
    keywords :
    keywords_vocabulary :
    license :
    No restrictions on access or use.
    Metadata_Conventions :
    CF-1.6, Unidata Dataset Discovery v1.0, GDS v2.0
    platform :
    product_version :
    project :
    NASA/MEaSUREs
    sensor :
    spatial_resolution :
    450 m
    standard_name_vocabulary :
    CF Standard Name Table (v22, 12 February 2013)
    summary :
    time_coverage_end :
    2016-12-31
    time_coverage_start :
    1995-01-01
    title :
    MEaSURES Antarctica Ice Velocity Map 450m spacing
  • " ], "text/plain": [ - " Size: 298MB\n", - "Dimensions: (x: 27, y: 27, sample: 99766)\n", + " Size: 7GB\n", + "Dimensions: (band: 1, x: 12445, y: 12445)\n", "Coordinates:\n", - " * x (x) int64 216B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n", - " * y (y) int64 216B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n", - " * sample (sample) int64 798kB 0 1 2 3 4 5 ... 99761 99762 99763 99764 99765\n", + " * band (band) int64 8B 1\n", + " * x (x) float64 100kB -2.8e+06 -2.8e+06 ... 2.799e+06 2.8e+06\n", + " * y (y) float64 100kB 2.8e+06 2.8e+06 ... -2.799e+06 -2.8e+06\n", + " spatial_ref int64 8B 0\n", + " coord_system int64 8B 0\n", "Data variables:\n", - " images (sample, x, y) float32 291MB 1.093e+03 1.093e+03 ... 2.133e+03\n", - " labels (sample) float64 798kB 1.064e+03 1.194e+03 ... 2.453e+03 1.68e+03\n", - " vx (sample) float64 798kB -2.619 31.06 -2.924 ... -167.4 -43.76 -4.671\n", - " vy (sample) float64 798kB 3.084 -41.06 8.954 ... -27.1 47.03 -1.08\n", - " v (sample) float64 798kB 4.046 51.48 9.419 ... 169.6 64.24 4.794\n", - " smb (sample) float64 798kB 62.64 451.3 490.5 ... 1.294e+03 738.1 31.25\n", - " z (sample) float64 798kB 1.162e+03 1.204e+03 ... 1.22e+03 2.154e+03\n", - " s (sample) float64 798kB 0.007977 0.01595 ... 0.00455 0.008152\n", - " temp (sample) float64 798kB 244.0 252.7 246.3 ... 258.2 249.8 234.5\n", - "Attributes:\n", - " description: CNN data with elevation images. Scalar features are everyth..." + " lat (band, y, x) float64 1GB ...\n", + " SOURCE (band, y, x) int8 155MB ...\n", + " lon (band, y, x) float64 1GB ...\n", + " VX (band, y, x) float32 620MB ...\n", + " VY (band, y, x) float32 620MB ...\n", + " STDX (band, y, x) float32 620MB ...\n", + " STDY (band, y, x) float32 620MB ...\n", + " ERRX (band, y, x) float32 620MB ...\n", + " ERRY (band, y, x) float32 620MB ...\n", + " CNT (band, y, x) int32 620MB ...\n", + "Attributes: (12/27)\n", + " cdm_data_type: Grid\n", + " comment: \n", + " Conventions: CF-1.6\n", + " creator_name: J. Mouginot\n", + " date_created: 2019-07-08T14:43:24.00005131959583Z\n", + " geospatial_lat_max: -60\n", + " ... ...\n", + " spatial_resolution: 450 m\n", + " standard_name_vocabulary: CF Standard Name Table (v22, 12 February 2013)\n", + " summary: \n", + " time_coverage_end: 2016-12-31\n", + " time_coverage_start: 1995-01-01\n", + " title: MEaSURES Antarctica Ice Velocity Map 450m spacing" ] }, - "execution_count": 16, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "training_data_ds" + "vel" ] }, { "cell_type": "code", - "execution_count": null, - "id": "c0812faa", + "execution_count": 5, + "id": "9489595e", "metadata": {}, "outputs": [], "source": [ - "# training_data_ds.to_netcdf('conv_train_1.nc')" + "tab = con.read_parquet('grid_300km_30m.parquet')" ] }, { "cell_type": "code", - "execution_count": 18, - "id": "bdb4d03a", + "execution_count": 6, + "id": "98f2dd49", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "aa7e518e9ed745d9869ca053e848a57d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Stratified sampling in 'THICK' bins using ibis to conserve memory\n", + "num_points = 200_000\n", + "n_bins = 50 # Adjust for smoothness\n", + "\n", + "# Compute bin edges\n", + "thick_min = tab.THICK.min().execute()\n", + "thick_max = tab.THICK.max().execute()\n", + "bin_edges = np.linspace(thick_min, thick_max, n_bins + 1)\n", + "\n", + "samples_per_bin = num_points // n_bins\n", + "sampled_tables = []\n", + "\n", + "for b in range(n_bins):\n", + " lower = bin_edges[b]\n", + " upper = bin_edges[b+1]\n", + " # Filter rows in this bin\n", + " bin_rows = tab.filter((tab.THICK >= lower) & (tab.THICK < upper))\n", + " # Count rows in this bin\n", + " bin_count = bin_rows.count().execute()\n", + " n = min(samples_per_bin, bin_count)\n", + " if n > 0:\n", + " # Sample n rows from this bin\n", + " sampled = bin_rows.sample(n/bin_count)\n", + " sampled_tables.append(sampled)\n", + "\n", + "# Concatenate all sampled tables\n", + "sampled_tab = sampled_tables[0]\n", + "for t in sampled_tables[1:]:\n", + " sampled_tab = sampled_tab.union(t)\n", + "\n", + "# 3.1. Create a spatial index for your GeoDataFrame\n", + "gdf = sampled_tab.to_pandas()\n", + "gdf.crs = \"EPSG:3031\"\n", + "gdf_sindex = gdf.sindex" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e57852d7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "188641" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.hist(gdf.THICK, bins = 50)\n", + "\n", + "len(gdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "ae2f315d", "metadata": {}, "outputs": [], "source": [ - "test_import = xr.open_dataset('conv_train_1.nc') " + "gdf.to_parquet(\"CNN_uniform_medGrid.parquet\", engine='pyarrow', index=False) " ] }, { "cell_type": "code", - "execution_count": 19, - "id": "6bf789a6", + "execution_count": 9, + "id": "e1e79d11", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    THICKgeometryEASTNORTHvxvyvith_bmsmbzstempgridCellId
    067.61POINT (-436492.017 805811.959)-4.364920e+058.058120e+05-0.4723370.0719710.477789465.73584072.7923621142.1935510.040661244.656438168
    120.52POINT (-1771954.88 406450.511)-1.771955e+064.064505e+05-200.011575-18.488875200.8643041.167979890.7504280.1339340.000384258.822599146
    217.00POINT (-2081203.73 929734.905)-2.081204e+069.297349e+05-30.231132-52.25114860.36641386.6876471122.7039661260.2912870.077658258.262919181
    39.76POINT (-2171317.081 1127943.654)-2.171317e+061.127944e+06328.824283433.530033544.126547291.501724349.52900131.5428200.002879259.838462181
    414.60POINT (-1790058.512 611857.208)-1.790059e+066.118572e+05-139.122730-343.245610370.368307191.023203466.59578420.5843480.000208260.769420164
    ..........................................
    1886364691.40POINT (1339999.16 -724732.062)1.339999e+06-7.247321e+050.195412-0.6615230.6897824461.96262726.1706963212.8732910.000693222.00026684
    1886374683.00POINT (1340438.153 -722669.668)1.340438e+06-7.226697e+050.229136-0.6606270.6992364677.49540626.0989923211.7980070.000576222.01194784
    1886384762.80POINT (1339922.911 -724065.063)1.339923e+06-7.240651e+050.200907-0.6609400.6908014550.00877126.1429503212.5235500.000711222.00437584
    1886394724.17POINT (1335450.234 -721026.256)1.335450e+06-7.210263e+050.045724-0.7383380.7397524547.44261026.1111633211.6823840.000574222.03010084
    1886404714.01POINT (1336947.857 -720463.901)1.336948e+06-7.204639e+050.096421-0.7349600.7412584580.86773726.0675743211.4718000.000371222.03056184
    \n", + "

    188641 rows × 13 columns

    \n", + "
    " + ], + "text/plain": [ + " THICK geometry EAST NORTH \\\n", + "0 67.61 POINT (-436492.017 805811.959) -4.364920e+05 8.058120e+05 \n", + "1 20.52 POINT (-1771954.88 406450.511) -1.771955e+06 4.064505e+05 \n", + "2 17.00 POINT (-2081203.73 929734.905) -2.081204e+06 9.297349e+05 \n", + "3 9.76 POINT (-2171317.081 1127943.654) -2.171317e+06 1.127944e+06 \n", + "4 14.60 POINT (-1790058.512 611857.208) -1.790059e+06 6.118572e+05 \n", + "... ... ... ... ... \n", + "188636 4691.40 POINT (1339999.16 -724732.062) 1.339999e+06 -7.247321e+05 \n", + "188637 4683.00 POINT (1340438.153 -722669.668) 1.340438e+06 -7.226697e+05 \n", + "188638 4762.80 POINT (1339922.911 -724065.063) 1.339923e+06 -7.240651e+05 \n", + "188639 4724.17 POINT (1335450.234 -721026.256) 1.335450e+06 -7.210263e+05 \n", + "188640 4714.01 POINT (1336947.857 -720463.901) 1.336948e+06 -7.204639e+05 \n", + "\n", + " vx vy v ith_bm smb \\\n", + "0 -0.472337 0.071971 0.477789 465.735840 72.792362 \n", + "1 -200.011575 -18.488875 200.864304 1.167979 890.750428 \n", + "2 -30.231132 -52.251148 60.366413 86.687647 1122.703966 \n", + "3 328.824283 433.530033 544.126547 291.501724 349.529001 \n", + "4 -139.122730 -343.245610 370.368307 191.023203 466.595784 \n", + "... ... ... ... ... ... \n", + "188636 0.195412 -0.661523 0.689782 4461.962627 26.170696 \n", + "188637 0.229136 -0.660627 0.699236 4677.495406 26.098992 \n", + "188638 0.200907 -0.660940 0.690801 4550.008771 26.142950 \n", + "188639 0.045724 -0.738338 0.739752 4547.442610 26.111163 \n", + "188640 0.096421 -0.734960 0.741258 4580.867737 26.067574 \n", + "\n", + " z s temp gridCellId \n", + "0 1142.193551 0.040661 244.656438 168 \n", + "1 0.133934 0.000384 258.822599 146 \n", + "2 1260.291287 0.077658 258.262919 181 \n", + "3 31.542820 0.002879 259.838462 181 \n", + "4 20.584348 0.000208 260.769420 164 \n", + "... ... ... ... ... \n", + "188636 3212.873291 0.000693 222.000266 84 \n", + "188637 3211.798007 0.000576 222.011947 84 \n", + "188638 3212.523550 0.000711 222.004375 84 \n", + "188639 3211.682384 0.000574 222.030100 84 \n", + "188640 3211.471800 0.000371 222.030561 84 \n", + "\n", + "[188641 rows x 13 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "b30145d1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([4065., 3814., 3880., 4065., 4103., 3980., 3995., 3950., 4067.,\n", + " 4104., 4000., 4038., 4001., 3978., 3992., 4040., 4064., 4064.,\n", + " 3906., 4039., 3957., 3937., 3990., 3915., 4030., 4038., 3955.,\n", + " 4018., 3966., 4090., 3911., 3972., 3922., 3993., 3923., 4043.,\n", + " 4069., 4123., 4040., 3873., 3988., 3973., 4023., 4027., 3966.,\n", + " 4043., 1925., 1838., 1215., 268.]),\n", + " array([5.1000000e-01, 9.5923800e+01, 1.9133760e+02, 2.8675140e+02,\n", + " 3.8216520e+02, 4.7757900e+02, 5.7299280e+02, 6.6840660e+02,\n", + " 7.6382040e+02, 8.5923420e+02, 9.5464800e+02, 1.0500618e+03,\n", + " 1.1454756e+03, 1.2408894e+03, 1.3363032e+03, 1.4317170e+03,\n", + " 1.5271308e+03, 1.6225446e+03, 1.7179584e+03, 1.8133722e+03,\n", + " 1.9087860e+03, 2.0041998e+03, 2.0996136e+03, 2.1950274e+03,\n", + " 2.2904412e+03, 2.3858550e+03, 2.4812688e+03, 2.5766826e+03,\n", + " 2.6720964e+03, 2.7675102e+03, 2.8629240e+03, 2.9583378e+03,\n", + " 3.0537516e+03, 3.1491654e+03, 3.2445792e+03, 3.3399930e+03,\n", + " 3.4354068e+03, 3.5308206e+03, 3.6262344e+03, 3.7216482e+03,\n", + " 3.8170620e+03, 3.9124758e+03, 4.0078896e+03, 4.1033034e+03,\n", + " 4.1987172e+03, 4.2941310e+03, 4.3895448e+03, 4.4849586e+03,\n", + " 4.5803724e+03, 4.6757862e+03, 4.7712000e+03]),\n", + " )" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.hist(gdf.THICK, bins = 50)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8cd3bb9e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "189176" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(gdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9f8614bd", + "metadata": {}, + "outputs": [], + "source": [ + "size = 27 #pixels\n", + "half = size // 2\n", + "\n", + "images = []\n", + "vx_images = []\n", + "vy_images = []\n", + "im_data = {}\n", + "\n", + "scalar_feats = ['THICK', 'vx', 'vy', 'v', 'smb', 'z', 's', 'temp', 'gridCellId']\n", + "\n", + "for sclr in scalar_feats:\n", + " im_data[sclr] = []\n", + "\n", + "\n", + "for idx, data_row in gdf.iterrows():\n", + " geom = data_row.geometry\n", + "\n", + " col, row = ~transform * (geom.x, geom.y) #Pixel coordinates\n", + " col, row = int(np.floor(col)), int(np.floor(row))\n", + "\n", + " patch = sat_im.surface.isel(\n", + " y=slice(row-half, row+half+1),\n", + " x=slice(col-half, col+half+1)\n", + " )\n", + "\n", + " image = xr.DataArray(\n", + " patch[0].values,\n", + " coords = {\n", + " \"x\": np.arange(size),\n", + " \"y\": np.arange(size)\n", + " },\n", + " dims = (\"x\", \"y\"),\n", + " name = \"z_image\"\n", + " )\n", + "\n", + " vx_col, vx_row = ~vx_transform * (geom.x, geom.y) #Pixel coordinates for vx\n", + " vx_col, vx_row = int(np.floor(vx_col)), int(np.floor(vx_row))\n", + "\n", + " vx_patch = vel.VX.isel(\n", + " y=slice(vx_row-half, vx_row+half+1),\n", + " x=slice(vx_col-half, vx_col+half+1)\n", + " )\n", + "\n", + " vx_image = xr.DataArray(\n", + " vx_patch[0].values,\n", + " coords = {\n", + " \"x\": np.arange(size),\n", + " \"y\": np.arange(size)\n", + " },\n", + " dims = (\"x\", \"y\"),\n", + " name = \"vx_image\"\n", + " )\n", + "\n", + " vy_col, vy_row = ~vy_transform * (geom.x, geom.y) #Pixel coordinates for vx\n", + " vy_col, vy_row = int(np.floor(vy_col)), int(np.floor(vy_row))\n", + "\n", + " vy_patch = vel.VY.isel(\n", + " y=slice(vy_row-half, vy_row+half+1),\n", + " x=slice(vy_col-half, vy_col+half+1)\n", + " )\n", + "\n", + " vy_image = xr.DataArray(\n", + " vy_patch[0].values,\n", + " coords = {\n", + " \"x\": np.arange(size),\n", + " \"y\": np.arange(size)\n", + " },\n", + " dims = (\"x\", \"y\"),\n", + " name = \"vy_image\"\n", + " )\n", + "\n", + " images.append(image)\n", + " vx_images.append(vx_image)\n", + " vy_images.append(vy_image)\n", + " for sclr in scalar_feats:\n", + " im_data[sclr].append(data_row[sclr])\n", + "\n", + "sc = np.arange(len(gdf))\n", + "\n", + "# Create a DataArray for all images\n", + "all_images_da = xr.concat(images, dim = 'sample')\n", + "all_images_da['sample'] = sc # Add sample coordinates\n", + "\n", + "all_VXimages_da = xr.concat(vx_images, dim = 'sample')\n", + "all_VXimages_da['sample'] = sc # Add sample coordinates\n", + "\n", + "all_VYimages_da = xr.concat(vy_images, dim = 'sample')\n", + "all_VYimages_da['sample'] = sc # Add sample coordinates\n", + "\n", + "scalars_ds = xr.Dataset(\n", + " {\n", + " 'vx': xr.DataArray(np.array(im_data['vx']), coords = {'sample': sc}, dims = ('sample',), name = 'vx'),\n", + " 'vy': xr.DataArray(np.array(im_data['vy']), coords = {'sample': sc}, dims = ('sample',), name = 'vy'),\n", + " 'v': xr.DataArray(np.array(im_data['v']), coords = {'sample': sc}, dims = ('sample',), name = 'v'),\n", + " 'smb': xr.DataArray(np.array(im_data['smb']), coords = {'sample': sc}, dims = ('sample',), name = 'smb'),\n", + " 'z': xr.DataArray(np.array(im_data['z']), coords = {'sample': sc}, dims = ('sample',), name = 'z'),\n", + " 's': xr.DataArray(np.array(im_data['s']), coords = {'sample': sc}, dims = ('sample',), name = 's'),\n", + " 'temp': xr.DataArray(np.array(im_data['temp']), coords = {'sample': sc}, dims = ('sample',), name = 'temp'),\n", + " 'gridCellId': xr.DataArray(np.array(im_data['gridCellId']), coords = {'sample': sc}, dims = ('sample',), name = 'gridCellId')\n", + " },\n", + " coords = {'sample': sc}\n", + ")\n", + "\n", + "# Create DataArrays for labels and scalar features, aligning with the 'sample' dimension\n", + "labels_da = xr.DataArray(\n", + " np.array(im_data[\"THICK\"]),\n", + " coords={\"sample\": sc},\n", + " dims=(\"sample\",),\n", + " name=\"label\"\n", + ")\n", + "\n", + "# Combine everything into a single Dataset\n", + "training_data_ds = xr.Dataset(\n", + " {\n", + " \"z_images\": all_images_da,\n", + " \"vx_images\": all_VXimages_da,\n", + " \"vy_images\": all_VYimages_da,\n", + " \"labels\": labels_da\n", + " },\n", + " coords={\"sample\": sc}, # Add sample coordinates from scalar_features_ds\n", + " # name = \"Elevation images, with labels and scarlars\",\n", + " attrs={'description': 'CNN data with elevation and ice-velocity images. N = 189176. Scalar features are everything from Niccolo 30M parquet + gridCellId.Images are 27x27 pixels. Roughly uniform dist in THICK (50 bins)'}\n", + ")\n", + "\n", + "training_data_ds = training_data_ds.merge(scalars_ds)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "6cc1c242", "metadata": {}, "outputs": [ { @@ -1379,62 +1524,217 @@ " stroke: currentColor;\n", " fill: currentColor;\n", "}\n", - "
    <xarray.Dataset> Size: 298MB\n",
    -       "Dimensions:  (sample: 99766, x: 27, y: 27)\n",
    +       "
    <xarray.Dataset> Size: 2GB\n",
    +       "Dimensions:     (x: 27, y: 27, sample: 189176)\n",
            "Coordinates:\n",
    -       "  * sample   (sample) int32 399kB 0 1 2 3 4 5 ... 99761 99762 99763 99764 99765\n",
    -       "  * x        (x) int32 108B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n",
    -       "  * y        (y) int32 108B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n",
    +       "  * x           (x) int64 216B 0 1 2 3 4 5 6 7 8 ... 18 19 20 21 22 23 24 25 26\n",
    +       "  * y           (y) int64 216B 0 1 2 3 4 5 6 7 8 ... 18 19 20 21 22 23 24 25 26\n",
    +       "  * sample      (sample) int64 2MB 0 1 2 3 4 ... 189172 189173 189174 189175\n",
            "Data variables:\n",
    -       "    images   (sample, x, y) float32 291MB ...\n",
    -       "    labels   (sample) float64 798kB ...\n",
    -       "    vx       (sample) float64 798kB ...\n",
    -       "    vy       (sample) float64 798kB ...\n",
    -       "    v        (sample) float64 798kB ...\n",
    -       "    smb      (sample) float64 798kB ...\n",
    -       "    z        (sample) float64 798kB ...\n",
    -       "    s        (sample) float64 798kB ...\n",
    -       "    temp     (sample) float64 798kB ...\n",
    +       "    z_images    (sample, x, y) float32 552MB 575.3 401.9 ... 3.212e+03 3.211e+03\n",
    +       "    vx_images   (sample, x, y) float32 552MB -0.1477 -1.239 ... 0.2628 0.277\n",
    +       "    vy_images   (sample, x, y) float32 552MB -2.234 -3.004 ... -0.651 -0.6441\n",
    +       "    labels      (sample) float64 2MB 12.0 65.75 60.7 ... 4.724e+03 4.714e+03\n",
    +       "    vx          (sample) float64 2MB 6.419 -7.437 32.78 ... 0.04572 0.09642\n",
    +       "    vy          (sample) float64 2MB 26.79 -12.35 -59.19 ... -0.7383 -0.735\n",
    +       "    v           (sample) float64 2MB 27.54 14.42 67.66 ... 0.6908 0.7398 0.7413\n",
    +       "    smb         (sample) float64 2MB 508.0 443.6 601.2 ... 26.14 26.11 26.07\n",
    +       "    z           (sample) float64 2MB 24.15 19.12 16.59 ... 3.212e+03 3.211e+03\n",
    +       "    s           (sample) float64 2MB 0.01221 0.000318 ... 0.000574 0.0003712\n",
    +       "    temp        (sample) float64 2MB 262.3 260.6 255.8 ... 222.0 222.0 222.0\n",
    +       "    gridCellId  (sample) int64 2MB 164 110 42 181 198 194 ... 84 84 84 84 84 84\n",
            "Attributes:\n",
    -       "    description:  CNN data with elevation images. Scalar features are everyth...
  • sample
    PandasIndex
    PandasIndex(Index([     0,      1,      2,      3,      4,      5,      6,      7,      8,\n",
    +       "            9,\n",
    +       "       ...\n",
    +       "       189166, 189167, 189168, 189169, 189170, 189171, 189172, 189173, 189174,\n",
    +       "       189175],\n",
    +       "      dtype='int64', name='sample', length=189176))
  • description :
    CNN data with elevation and ice-velocity images. N = 189176. Scalar features are everything from Niccolo 30M parquet + gridCellId.Images are 27x27 pixels. Roughly uniform dist in THICK (50 bins)
  • " ], "text/plain": [ - " Size: 298MB\n", - "Dimensions: (sample: 99766, x: 27, y: 27)\n", + " Size: 2GB\n", + "Dimensions: (x: 27, y: 27, sample: 189176)\n", "Coordinates:\n", - " * sample (sample) int32 399kB 0 1 2 3 4 5 ... 99761 99762 99763 99764 99765\n", - " * x (x) int32 108B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n", - " * y (y) int32 108B 0 1 2 3 4 5 6 7 8 9 ... 18 19 20 21 22 23 24 25 26\n", + " * x (x) int64 216B 0 1 2 3 4 5 6 7 8 ... 18 19 20 21 22 23 24 25 26\n", + " * y (y) int64 216B 0 1 2 3 4 5 6 7 8 ... 18 19 20 21 22 23 24 25 26\n", + " * sample (sample) int64 2MB 0 1 2 3 4 ... 189172 189173 189174 189175\n", "Data variables:\n", - " images (sample, x, y) float32 291MB ...\n", - " labels (sample) float64 798kB ...\n", - " vx (sample) float64 798kB ...\n", - " vy (sample) float64 798kB ...\n", - " v (sample) float64 798kB ...\n", - " smb (sample) float64 798kB ...\n", - " z (sample) float64 798kB ...\n", - " s (sample) float64 798kB ...\n", - " temp (sample) float64 798kB ...\n", + " z_images (sample, x, y) float32 552MB 575.3 401.9 ... 3.212e+03 3.211e+03\n", + " vx_images (sample, x, y) float32 552MB -0.1477 -1.239 ... 0.2628 0.277\n", + " vy_images (sample, x, y) float32 552MB -2.234 -3.004 ... -0.651 -0.6441\n", + " labels (sample) float64 2MB 12.0 65.75 60.7 ... 4.724e+03 4.714e+03\n", + " vx (sample) float64 2MB 6.419 -7.437 32.78 ... 0.04572 0.09642\n", + " vy (sample) float64 2MB 26.79 -12.35 -59.19 ... -0.7383 -0.735\n", + " v (sample) float64 2MB 27.54 14.42 67.66 ... 0.6908 0.7398 0.7413\n", + " smb (sample) float64 2MB 508.0 443.6 601.2 ... 26.14 26.11 26.07\n", + " z (sample) float64 2MB 24.15 19.12 16.59 ... 3.212e+03 3.211e+03\n", + " s (sample) float64 2MB 0.01221 0.000318 ... 0.000574 0.0003712\n", + " temp (sample) float64 2MB 262.3 260.6 255.8 ... 222.0 222.0 222.0\n", + " gridCellId (sample) int64 2MB 164 110 42 181 198 194 ... 84 84 84 84 84 84\n", "Attributes:\n", - " description: CNN data with elevation images. Scalar features are everyth..." + " description: CNN data with elevation and ice-velocity images. N = 189176..." ] }, - "execution_count": 19, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "test_import" + "training_data_ds" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c0812faa", + "metadata": {}, + "outputs": [], + "source": [ + "# training_data_ds.to_netcdf('D:/DOCS/AntarticaBedmap/Gridded_CNN_train_uniform_VelSurface.nc')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "bdb4d03a", + "metadata": {}, + "outputs": [], + "source": [ + "test_import = xr.open_dataset('D:/DOCS/AntarticaBedmap/Gridded_CNN_train_uniform_VelSurface.nc')" ] }, {