{ "cells": [ { "cell_type": "markdown", "id": "7743b033-a592-4486-8444-27f550b0a7e9", "metadata": {}, "source": [ "# Grid alignment, ASF PC\n", "\n", "Goal is to put ASF, PC data on the same grid in order to compare the two datasets with the layover-shadow mask of the ASF dataset applied to the PC dataset as well (maybe the inclusion of layover/shadow pixels in the PC dataset that are excldued from the ASF dataset is resonsible for the observed offset between the two when comparing spatial mean backscatter over time)\n", "\n", "Steps:\n", "1. downsample: PC dataset is 10m resolution, ASF is 30m. want to downsample PC to spatial resolution of ASF (i'm using `interp_like()` currently)\n", "2. once they are on the same grid, mask PC dataset where ASF = nan" ] }, { "cell_type": "code", "execution_count": 1, "id": "ebe57314-108a-4b93-9956-311dd145f990", "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "id": "92d3908a-2d41-45e0-912d-04cd76dc0aa4", "metadata": {}, "outputs": [], "source": [ "%store -r " ] }, { "cell_type": "markdown", "id": "1d7118a1-f021-4eea-92aa-957c2db9c13d", "metadata": {}, "source": [ "## Initial setup\n", "\n", "Read in data and subset both datasets to only common acquisitions between the two (drops a handful of time steps )" ] }, { "cell_type": "code", "execution_count": 3, "id": "1a28e6d6-4d72-4aee-8839-093e511a4128", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'stackstac-6805d1700af7afbc3f34ddbf3b38393f' (time: 100,\n",
       "                                                                band: 2,\n",
       "                                                                y: 1188, x: 869)>\n",
       "dask.array<fetch_raster_window, shape=(100, 2, 1188, 869), dtype=float64, chunksize=(1, 1, 1024, 869), chunktype=numpy.ndarray>\n",
       "Coordinates: (12/40)\n",
       "  * time                                   (time) datetime64[ns] 2021-06-02T1...\n",
       "    id                                     (time) <U66 'S1A_IW_GRDH_1SDV_2021...\n",
       "  * band                                   (band) <U2 'vh' 'vv'\n",
       "  * x                                      (x) float64 6.194e+05 ... 6.281e+05\n",
       "  * y                                      (y) float64 3.102e+06 ... 3.09e+06\n",
       "    sat:platform_international_designator  <U9 '2014-016A'\n",
       "    ...                                     ...\n",
       "    start_datetime                         (time) <U32 '2021-06-02 12:05:44.9...\n",
       "    description                            (band) <U173 'Terrain-corrected ga...\n",
       "    title                                  (band) <U41 'VH: vertical transmit...\n",
       "    raster:bands                           object {'nodata': -32768, 'data_ty...\n",
       "    epsg                                   int64 32645\n",
       "    granule_id                             (time) <U62 'S1A_IW_GRDH_1SDV_2021...\n",
       "Attributes:\n",
       "    spec:        RasterSpec(epsg=32645, bounds=(619420.0, 3089780.0, 628110.0...\n",
       "    crs:         epsg:32645\n",
       "    transform:   | 10.00, 0.00, 619420.00|\\n| 0.00,-10.00, 3101660.00|\\n| 0.0...\n",
       "    resolution:  10.0
" ], "text/plain": [ "\n", "dask.array\n", "Coordinates: (12/40)\n", " * time (time) datetime64[ns] 2021-06-02T1...\n", " id (time) \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:                           (acq_date: 103, y: 396, x: 290)\n",
       "Coordinates: (12/19)\n",
       "  * acq_date                          (acq_date) datetime64[ns] 2021-05-02 .....\n",
       "    granule_id                        (acq_date) <U67 'S1A_IW_SLC__1SDV_20210...\n",
       "  * x                                 (x) float64 6.194e+05 ... 6.281e+05\n",
       "  * y                                 (y) float64 3.102e+06 ... 3.09e+06\n",
       "    spatial_ref                       int64 0\n",
       "    sensor                            (acq_date) <U3 'S1A' 'S1A' ... 'S1A' 'S1A'\n",
       "    ...                                ...\n",
       "    masked                            (acq_date) <U1 'u' 'u' 'u' ... 'u' 'u' 'u'\n",
       "    filtered                          (acq_date) <U1 'n' 'n' 'n' ... 'n' 'n' 'n'\n",
       "    area                              (acq_date) <U1 'e' 'e' 'e' ... 'e' 'e' 'e'\n",
       "    product_id                        (acq_date) <U4 '748F' '0D1E' ... 'BD36'\n",
       "    acq_hour                          (acq_date) int64 0 12 12 12 ... 0 12 12 0\n",
       "    orbital_dir                       (acq_date) <U4 'asc' 'desc' ... 'asc'\n",
       "Data variables:\n",
       "    vv                                (acq_date, y, x) float32 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>\n",
       "    vh                                (acq_date, y, x) float32 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>\n",
       "    ls                                (acq_date, y, x) float64 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>
" ], "text/plain": [ "\n", "Dimensions: (acq_date: 103, y: 396, x: 290)\n", "Coordinates: (12/19)\n", " * acq_date (acq_date) datetime64[ns] 2021-05-02 .....\n", " granule_id (acq_date) \n", " vh (acq_date, y, x) float32 dask.array\n", " ls (acq_date, y, x) float64 dask.array" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vrt_full" ] }, { "cell_type": "code", "execution_count": 5, "id": "0d561c7b-d8cc-4d0d-bc79-219b524135c8", "metadata": {}, "outputs": [], "source": [ "data_take_asf = [str(vrt_full.isel(acq_date = t).granule_id.values)[56:62] for t in range(len(vrt_full.acq_date))]\n", "data_take_pc = [str(da_pc.isel(time=t).granule_id.values)[56:] for t in range(len(da_pc.time))]" ] }, { "cell_type": "code", "execution_count": 6, "id": "5c1b9709-ee9b-4896-ab60-e57cbfbfef30", "metadata": {}, "outputs": [], "source": [ "vrt_full.coords['data_take_id'] = ('acq_date', data_take_asf, {'ID of data take from SAR acquisition':'ID data take'})\n", "da_pc.coords['data_take_id'] = ('time', data_take_pc)" ] }, { "cell_type": "code", "execution_count": 7, "id": "e3408288-b99d-4e99-9d30-2b1325a273ff", "metadata": {}, "outputs": [], "source": [ "pc_data_take_ls = list(da_pc.data_take_id.values)\n", "asf_data_take_ls = list(vrt_full.data_take_id.values)" ] }, { "cell_type": "code", "execution_count": 8, "id": "2e50f1a9-fc91-4c59-9f24-20f79f302d5b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "84" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "common_data_takes = list(set(pc_data_take_ls) & set(asf_data_take_ls))\n", "len(common_data_takes)" ] }, { "cell_type": "code", "execution_count": 9, "id": "3dbee9b3-cea7-4cc4-980d-ee602f36706f", "metadata": {}, "outputs": [], "source": [ "subset_condition_asf = vrt_full.data_take_id.isin(common_data_takes)\n", "\n", "subset_condition_pc = da_pc.data_take_id.isin(common_data_takes)" ] }, { "cell_type": "code", "execution_count": 10, "id": "8c5bce37-26ff-4470-a25c-852367f5188e", "metadata": {}, "outputs": [], "source": [ "asf_subset = vrt_full.sel(acq_date = vrt_full.data_take_id.isin(common_data_takes))\n", "pc_subset = da_pc.sel(time = da_pc.data_take_id.isin(common_data_takes))" ] }, { "cell_type": "markdown", "id": "664818c0-8cd8-42af-a70f-3c71796ece87", "metadata": {}, "source": [ "## Downsample" ] }, { "cell_type": "code", "execution_count": 11, "id": "55bbd1bb-d5e7-4251-854c-193c947cd9e0", "metadata": {}, "outputs": [], "source": [ "pc_downsample = pc_subset.interp_like(asf_subset)" ] }, { "cell_type": "code", "execution_count": 13, "id": "7f4db2ea-2adf-41e5-9c29-6a0e61e45547", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'stackstac-6805d1700af7afbc3f34ddbf3b38393f' (time: 84,\n",
       "                                                                band: 2,\n",
       "                                                                y: 396, x: 290)>\n",
       "dask.array<transpose, shape=(84, 2, 396, 290), dtype=float64, chunksize=(1, 1, 396, 290), chunktype=numpy.ndarray>\n",
       "Coordinates: (12/41)\n",
       "  * time                                   (time) datetime64[ns] 2021-06-02T1...\n",
       "    id                                     (time) <U66 'S1A_IW_GRDH_1SDV_2021...\n",
       "  * band                                   (band) <U2 'vh' 'vv'\n",
       "    sat:platform_international_designator  <U9 '2014-016A'\n",
       "    s1:datatake_id                         (time) <U6 '295165' ... '338944'\n",
       "    s1:instrument_configuration_ID         (time) <U1 '6' '6' '6' ... '7' '7'\n",
       "    ...                                     ...\n",
       "    raster:bands                           object {'nodata': -32768, 'data_ty...\n",
       "    epsg                                   int64 32645\n",
       "    granule_id                             (time) <U62 'S1A_IW_GRDH_1SDV_2021...\n",
       "    data_take_id                           (time) <U6 '0480FD' ... '052C00'\n",
       "  * x                                      (x) float64 6.194e+05 ... 6.281e+05\n",
       "  * y                                      (y) float64 3.102e+06 ... 3.09e+06\n",
       "Attributes:\n",
       "    spec:        RasterSpec(epsg=32645, bounds=(619420.0, 3089780.0, 628110.0...\n",
       "    crs:         epsg:32645\n",
       "    transform:   | 10.00, 0.00, 619420.00|\\n| 0.00,-10.00, 3101660.00|\\n| 0.0...\n",
       "    resolution:  10.0
" ], "text/plain": [ "\n", "dask.array\n", "Coordinates: (12/41)\n", " * time (time) datetime64[ns] 2021-06-02T1...\n", " id (time) \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:                           (acq_date: 84, y: 396, x: 290)\n",
       "Coordinates: (12/20)\n",
       "  * acq_date                          (acq_date) datetime64[ns] 2021-06-02 .....\n",
       "    granule_id                        (acq_date) <U67 'S1A_IW_SLC__1SDV_20210...\n",
       "  * x                                 (x) float64 6.194e+05 ... 6.281e+05\n",
       "  * y                                 (y) float64 3.102e+06 ... 3.09e+06\n",
       "    spatial_ref                       int64 0\n",
       "    sensor                            (acq_date) <U3 'S1A' 'S1A' ... 'S1A' 'S1A'\n",
       "    ...                                ...\n",
       "    filtered                          (acq_date) <U1 'n' 'n' 'n' ... 'n' 'n' 'n'\n",
       "    area                              (acq_date) <U1 'e' 'e' 'e' ... 'e' 'e' 'e'\n",
       "    product_id                        (acq_date) <U4 '1424' 'ABA0' ... 'FA4F'\n",
       "    acq_hour                          (acq_date) int64 12 12 0 12 0 ... 0 0 0 12\n",
       "    orbital_dir                       (acq_date) <U4 'desc' 'desc' ... 'desc'\n",
       "    data_take_id                      (acq_date) <U6 '0480FD' ... '052C00'\n",
       "Data variables:\n",
       "    vv                                (acq_date, y, x) float32 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>\n",
       "    vh                                (acq_date, y, x) float32 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>\n",
       "    ls                                (acq_date, y, x) float64 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>
" ], "text/plain": [ "\n", "Dimensions: (acq_date: 84, y: 396, x: 290)\n", "Coordinates: (12/20)\n", " * acq_date (acq_date) datetime64[ns] 2021-06-02 .....\n", " granule_id (acq_date) \n", " vh (acq_date, y, x) float32 dask.array\n", " ls (acq_date, y, x) float64 dask.array" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asf_subset" ] }, { "cell_type": "code", "execution_count": 16, "id": "976744bb-4762-4ea7-9ef9-c5bbeed50f11", "metadata": {}, "outputs": [], "source": [ "pc_times = [np.datetime64(str(pc_subset.isel(time=t).time.values).replace(str(pc_subset.isel(time=t).time.values)[-19:], 'T00:00:00.000000000')) for t in range(len(pc_subset.time))]\n", "time_condition = asf_subset.acq_date.isin(pc_times)\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "a1a788dd-ce89-4ffd-a64c-6d74c113bdc1", "metadata": {}, "outputs": [], "source": [ "asf_short = asf_subset.sel(acq_date = time_condition) #this is the same as asf_subset....." ] }, { "cell_type": "code", "execution_count": 18, "id": "1236303e-2717-458a-8140-f79a97fbdf2f", "metadata": {}, "outputs": [], "source": [ "#asf_short" ] }, { "cell_type": "code", "execution_count": 19, "id": "0252380c-72df-4319-b977-395035d372a2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "numpy.datetime64('2021-06-02T00:00:00.000000000')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pc_subset.time.values[0]\n", "pc_times[0]" ] }, { "cell_type": "code", "execution_count": 20, "id": "7872ef4e-b543-4e03-849a-c6650f2cdbf8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "numpy.datetime64('2021-06-02T00:00:00.000000000')" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asf_subset.acq_date.values[0]" ] }, { "cell_type": "markdown", "id": "1df5ffec-70f2-4153-ac00-c2c143562990", "metadata": {}, "source": [ "### Issue: \n", "\n" ] }, { "cell_type": "code", "execution_count": 27, "id": "47a7b761-fb3d-4902-beb0-1491aee4fc3e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/emmamarshall/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/core.py:4796: PerformanceWarning: Increasing number of chunks by factor of 84\n", " result = blockwise(\n", "/home/emmamarshall/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/core.py:4796: PerformanceWarning: Increasing number of chunks by factor of 84\n", " result = blockwise(\n", "/home/emmamarshall/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/core.py:4796: PerformanceWarning: Increasing number of chunks by factor of 84\n", " result = blockwise(\n" ] } ], "source": [ "pc_mask = xr.where(asf_short.notnull(), pc_downsample,np.nan)" ] }, { "cell_type": "markdown", "id": "1bae766d-2456-4abb-8c7f-9ade2d468f8d", "metadata": {}, "source": [ "Making ASF object w/ same dim names to use in `where()` ... don't think this will fix my issue..." ] }, { "cell_type": "code", "execution_count": 22, "id": "cea146bd-4e10-4cfb-87d5-2fc144936b90", "metadata": {}, "outputs": [], "source": [ "asf_scratch = asf_subset.rename_dims({'acq_date':'time'}).rename({'acq_date':'time'})" ] }, { "cell_type": "code", "execution_count": 24, "id": "c76a96c2-8779-4209-8c50-c97744cfdb1e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:                           (time: 84, y: 396, x: 290)\n",
       "Coordinates: (12/20)\n",
       "  * time                              (time) datetime64[ns] 2021-06-02 ... 20...\n",
       "    granule_id                        (time) <U67 'S1A_IW_SLC__1SDV_20210602T...\n",
       "  * x                                 (x) float64 6.194e+05 ... 6.281e+05\n",
       "  * y                                 (y) float64 3.102e+06 ... 3.09e+06\n",
       "    spatial_ref                       int64 0\n",
       "    sensor                            (time) <U3 'S1A' 'S1A' ... 'S1A' 'S1A'\n",
       "    ...                                ...\n",
       "    filtered                          (time) <U1 'n' 'n' 'n' 'n' ... 'n' 'n' 'n'\n",
       "    area                              (time) <U1 'e' 'e' 'e' 'e' ... 'e' 'e' 'e'\n",
       "    product_id                        (time) <U4 '1424' 'ABA0' ... '5BAD' 'FA4F'\n",
       "    acq_hour                          (time) int64 12 12 0 12 0 ... 12 0 0 0 12\n",
       "    orbital_dir                       (time) <U4 'desc' 'desc' ... 'asc' 'desc'\n",
       "    data_take_id                      (time) <U6 '0480FD' '048318' ... '052C00'\n",
       "Data variables:\n",
       "    vv                                (time, y, x) float32 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>\n",
       "    vh                                (time, y, x) float32 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>\n",
       "    ls                                (time, y, x) float64 dask.array<chunksize=(1, 396, 290), meta=np.ndarray>
" ], "text/plain": [ "\n", "Dimensions: (time: 84, y: 396, x: 290)\n", "Coordinates: (12/20)\n", " * time (time) datetime64[ns] 2021-06-02 ... 20...\n", " granule_id (time) \n", " vh (time, y, x) float32 dask.array\n", " ls (time, y, x) float64 dask.array" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asf_scratch" ] }, { "cell_type": "code", "execution_count": 30, "id": "fe7fa5a3-c80f-4c2e-a727-53dcaae92108", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "cannot align objects with join='exact' where index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Input \u001b[0;32mIn [30]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m pc_mask \u001b[38;5;241m=\u001b[39m \u001b[43mpc_downsample\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwhere\u001b[49m\u001b[43m(\u001b[49m\u001b[43masf_scratch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotnull\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpc_downsample\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnan\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/common.py:1081\u001b[0m, in \u001b[0;36mDataWithCoords.where\u001b[0;34m(self, cond, other, drop)\u001b[0m\n\u001b[1;32m 1078\u001b[0m \u001b[38;5;28mself\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39misel(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mindexers)\n\u001b[1;32m 1079\u001b[0m cond \u001b[38;5;241m=\u001b[39m cond\u001b[38;5;241m.\u001b[39misel(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mindexers)\n\u001b[0;32m-> 1081\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwhere_method\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcond\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mother\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/ops.py:177\u001b[0m, in \u001b[0;36mwhere_method\u001b[0;34m(self, cond, other)\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[38;5;66;03m# alignment for three arguments is complicated, so don't support it yet\u001b[39;00m\n\u001b[1;32m 176\u001b[0m join \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minner\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m other \u001b[38;5;129;01mis\u001b[39;00m dtypes\u001b[38;5;241m.\u001b[39mNA \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mexact\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m--> 177\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mapply_ufunc\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 178\u001b[0m \u001b[43m \u001b[49m\u001b[43mduck_array_ops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwhere_method\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 179\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[43m \u001b[49m\u001b[43mcond\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 181\u001b[0m \u001b[43m \u001b[49m\u001b[43mother\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 182\u001b[0m \u001b[43m \u001b[49m\u001b[43mjoin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 183\u001b[0m \u001b[43m \u001b[49m\u001b[43mdataset_join\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 184\u001b[0m \u001b[43m \u001b[49m\u001b[43mdask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mallowed\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 185\u001b[0m \u001b[43m \u001b[49m\u001b[43mkeep_attrs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 186\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/computation.py:1192\u001b[0m, in \u001b[0;36mapply_ufunc\u001b[0;34m(func, input_core_dims, output_core_dims, exclude_dims, vectorize, join, dataset_join, dataset_fill_value, keep_attrs, kwargs, dask, output_dtypes, output_sizes, meta, dask_gufunc_kwargs, *args)\u001b[0m\n\u001b[1;32m 1190\u001b[0m \u001b[38;5;66;03m# feed datasets apply_variable_ufunc through apply_dataset_vfunc\u001b[39;00m\n\u001b[1;32m 1191\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28many\u001b[39m(is_dict_like(a) \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args):\n\u001b[0;32m-> 1192\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mapply_dataset_vfunc\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1193\u001b[0m \u001b[43m \u001b[49m\u001b[43mvariables_vfunc\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1194\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1195\u001b[0m \u001b[43m \u001b[49m\u001b[43msignature\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msignature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1196\u001b[0m \u001b[43m \u001b[49m\u001b[43mjoin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1197\u001b[0m \u001b[43m \u001b[49m\u001b[43mexclude_dims\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexclude_dims\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1198\u001b[0m \u001b[43m \u001b[49m\u001b[43mdataset_join\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdataset_join\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1199\u001b[0m \u001b[43m \u001b[49m\u001b[43mfill_value\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdataset_fill_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1200\u001b[0m \u001b[43m \u001b[49m\u001b[43mkeep_attrs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkeep_attrs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1201\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1202\u001b[0m \u001b[38;5;66;03m# feed DataArray apply_variable_ufunc through apply_dataarray_vfunc\u001b[39;00m\n\u001b[1;32m 1203\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(a, DataArray) \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args):\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/computation.py:471\u001b[0m, in \u001b[0;36mapply_dataset_vfunc\u001b[0;34m(func, signature, join, dataset_join, fill_value, exclude_dims, keep_attrs, *args)\u001b[0m\n\u001b[1;32m 468\u001b[0m objs \u001b[38;5;241m=\u001b[39m _all_of_type(args, Dataset)\n\u001b[1;32m 470\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m--> 471\u001b[0m args \u001b[38;5;241m=\u001b[39m \u001b[43mdeep_align\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 472\u001b[0m \u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjoin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexclude_dims\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mraise_on_invalid\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\n\u001b[1;32m 473\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 475\u001b[0m list_of_coords, list_of_indexes \u001b[38;5;241m=\u001b[39m build_output_coords_and_indexes(\n\u001b[1;32m 476\u001b[0m args, signature, exclude_dims, combine_attrs\u001b[38;5;241m=\u001b[39mkeep_attrs\n\u001b[1;32m 477\u001b[0m )\n\u001b[1;32m 478\u001b[0m args \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[38;5;28mgetattr\u001b[39m(arg, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata_vars\u001b[39m\u001b[38;5;124m\"\u001b[39m, arg) \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m args)\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/alignment.py:827\u001b[0m, in \u001b[0;36mdeep_align\u001b[0;34m(objects, join, copy, indexes, exclude, raise_on_invalid, fill_value)\u001b[0m\n\u001b[1;32m 824\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 825\u001b[0m out\u001b[38;5;241m.\u001b[39mappend(variables)\n\u001b[0;32m--> 827\u001b[0m aligned \u001b[38;5;241m=\u001b[39m \u001b[43malign\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 828\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mtargets\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 829\u001b[0m \u001b[43m \u001b[49m\u001b[43mjoin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 830\u001b[0m \u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 831\u001b[0m \u001b[43m \u001b[49m\u001b[43mindexes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindexes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 832\u001b[0m \u001b[43m \u001b[49m\u001b[43mexclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexclude\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 833\u001b[0m \u001b[43m \u001b[49m\u001b[43mfill_value\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfill_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 834\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 836\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m position, key, aligned_obj \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(positions, keys, aligned):\n\u001b[1;32m 837\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;129;01mis\u001b[39;00m no_key:\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/alignment.py:764\u001b[0m, in \u001b[0;36malign\u001b[0;34m(join, copy, indexes, exclude, fill_value, *objects)\u001b[0m\n\u001b[1;32m 568\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 569\u001b[0m \u001b[38;5;124;03mGiven any number of Dataset and/or DataArray objects, returns new\u001b[39;00m\n\u001b[1;32m 570\u001b[0m \u001b[38;5;124;03mobjects with aligned indexes and dimension sizes.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 754\u001b[0m \n\u001b[1;32m 755\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 756\u001b[0m aligner \u001b[38;5;241m=\u001b[39m Aligner(\n\u001b[1;32m 757\u001b[0m objects,\n\u001b[1;32m 758\u001b[0m join\u001b[38;5;241m=\u001b[39mjoin,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 762\u001b[0m fill_value\u001b[38;5;241m=\u001b[39mfill_value,\n\u001b[1;32m 763\u001b[0m )\n\u001b[0;32m--> 764\u001b[0m \u001b[43maligner\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43malign\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 765\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m aligner\u001b[38;5;241m.\u001b[39mresults\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/alignment.py:551\u001b[0m, in \u001b[0;36mAligner.align\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 549\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfind_matching_unindexed_dims()\n\u001b[1;32m 550\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39massert_no_index_conflict()\n\u001b[0;32m--> 551\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43malign_indexes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 552\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39massert_unindexed_dim_sizes_equal()\n\u001b[1;32m 554\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mjoin \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moverride\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/alignment.py:397\u001b[0m, in \u001b[0;36mAligner.align_indexes\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 395\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m need_reindex:\n\u001b[1;32m 396\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mjoin \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mexact\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 397\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 398\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcannot align objects with join=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mexact\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m where \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 399\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindex/labels/sizes are not equal along \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 400\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mthese coordinates (dimensions): \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 401\u001b[0m \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mname\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdims\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m name, dims \u001b[38;5;129;01min\u001b[39;00m key[\u001b[38;5;241m0\u001b[39m])\n\u001b[1;32m 402\u001b[0m )\n\u001b[1;32m 403\u001b[0m joiner \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_index_joiner(index_cls)\n\u001b[1;32m 404\u001b[0m joined_index \u001b[38;5;241m=\u001b[39m joiner(matching_indexes)\n", "\u001b[0;31mValueError\u001b[0m: cannot align objects with join='exact' where index/labels/sizes are not equal along these coordinates (dimensions): 'time' ('time',)" ] } ], "source": [ "pc_mask1 = pc_downsample.where(asf_scratch.notnull(), pc_downsample, np.nan)" ] }, { "cell_type": "markdown", "id": "64a3488c-93fd-4847-8b42-544df6266b71", "metadata": {}, "source": [ "^the only difference btw `asf_scratch.time` and `pc_downsample.time` is that one is date + time and one is just date w/ zeros for time. try dropping time next to see if this fixes it (I think I tried that in the other notebook and it didn't....)" ] }, { "cell_type": "markdown", "id": "127393c6-a010-47c2-a729-093f2b4349c5", "metadata": {}, "source": [ "When I try to execute the above cell using `xr.where()`, `pc_mask` is a 4d object with the time dimension from the PC object as well as the ASF object.\n", "When I try with `xr.DataArray.where()` \n", "I think this is some sort of indexing issue but not sure yet how to fix it, or if Im' using the wrong approach\n", "\n" ] }, { "cell_type": "markdown", "id": "02327f9a-ffc9-4f37-802f-12d4b65b4f44", "metadata": {}, "source": [ "#### trying w/ `xr.where()`" ] }, { "cell_type": "code", "execution_count": 32, "id": "929684b4-e03c-40d5-9da6-8de602e39ab9", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/emmamarshall/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/core.py:4796: PerformanceWarning: Increasing number of chunks by factor of 84\n", " result = blockwise(\n", "/home/emmamarshall/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/core.py:4796: PerformanceWarning: Increasing number of chunks by factor of 84\n", " result = blockwise(\n", "/home/emmamarshall/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/core.py:4796: PerformanceWarning: Increasing number of chunks by factor of 84\n", " result = blockwise(\n" ] } ], "source": [ "pc_mask = xr.where(asf_short.notnull(), pc_downsample,np.nan)" ] }, { "cell_type": "code", "execution_count": 33, "id": "d988c6bd-5ff9-4883-b588-ab39219eb5a7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:                                (acq_date: 84, y: 396, x: 290,\n",
       "                                            time: 84, band: 2)\n",
       "Coordinates: (12/55)\n",
       "  * acq_date                               (acq_date) datetime64[ns] 2021-06-...\n",
       "  * x                                      (x) float64 6.194e+05 ... 6.281e+05\n",
       "  * y                                      (y) float64 3.102e+06 ... 3.09e+06\n",
       "    spatial_ref                            int64 0\n",
       "    sensor                                 (acq_date) <U3 'S1A' 'S1A' ... 'S1A'\n",
       "    beam_mode                              (acq_date) <U2 'IW' 'IW' ... 'IW'\n",
       "    ...                                     ...\n",
       "    sar:instrument_mode                    <U2 'IW'\n",
       "    start_datetime                         (time) <U32 '2021-06-02 12:05:44.9...\n",
       "    description                            (band) <U173 'Terrain-corrected ga...\n",
       "    title                                  (band) <U41 'VH: vertical transmit...\n",
       "    raster:bands                           object {'nodata': -32768, 'data_ty...\n",
       "    epsg                                   int64 32645\n",
       "Data variables:\n",
       "    vv                                     (acq_date, y, x, time, band) float64 dask.array<chunksize=(1, 396, 290, 1, 1), meta=np.ndarray>\n",
       "    vh                                     (acq_date, y, x, time, band) float64 dask.array<chunksize=(1, 396, 290, 1, 1), meta=np.ndarray>\n",
       "    ls                                     (acq_date, y, x, time, band) float64 dask.array<chunksize=(1, 396, 290, 1, 1), meta=np.ndarray>
" ], "text/plain": [ "\n", "Dimensions: (acq_date: 84, y: 396, x: 290,\n", " time: 84, band: 2)\n", "Coordinates: (12/55)\n", " * acq_date (acq_date) datetime64[ns] 2021-06-...\n", " * x (x) float64 6.194e+05 ... 6.281e+05\n", " * y (y) float64 3.102e+06 ... 3.09e+06\n", " spatial_ref int64 0\n", " sensor (acq_date) \n", " vh (acq_date, y, x, time, band) float64 dask.array\n", " ls (acq_date, y, x, time, band) float64 dask.array" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pc_mask" ] }, { "cell_type": "markdown", "id": "accbddc4-a8e7-44dd-895c-e29f05b9856f", "metadata": {}, "source": [ "Tried building the object :" ] }, { "cell_type": "code", "execution_count": 34, "id": "435ff3aa-2f42-417c-8637-eab4838c58c2", "metadata": {}, "outputs": [], "source": [ "pc_new = xr.DataArray(coords = {'x':pc_mask.x.values,\n", " 'y':pc_mask.y.values,\n", " 'time':pc_mask.time.values},\n", " dims = ('x','y','time'),\n", " )" ] }, { "cell_type": "code", "execution_count": 35, "id": "fa5acfcd-0827-4c72-b04f-d3dec6ee65f6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray (x: 290, y: 396, time: 84)>\n",
       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        ...,\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
       "\n",
       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        ...,\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
       "\n",
       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        ...,\n",
       "...\n",
       "        ...,\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
       "\n",
       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        ...,\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
       "\n",
       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        ...,\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan],\n",
       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
       "Coordinates:\n",
       "  * x        (x) float64 6.194e+05 6.195e+05 6.195e+05 ... 6.281e+05 6.281e+05\n",
       "  * y        (y) float64 3.102e+06 3.102e+06 3.102e+06 ... 3.09e+06 3.09e+06\n",
       "  * time     (time) datetime64[ns] 2021-06-02T12:05:57.441074 ... 2022-05-21T...
" ], "text/plain": [ "\n", "array([[[nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " ...,\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan]],\n", "\n", " [[nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " ...,\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan]],\n", "\n", " [[nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " ...,\n", "...\n", " ...,\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan]],\n", "\n", " [[nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " ...,\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan]],\n", "\n", " [[nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " ...,\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan]]])\n", "Coordinates:\n", " * x (x) float64 6.194e+05 6.195e+05 6.195e+05 ... 6.281e+05 6.281e+05\n", " * y (y) float64 3.102e+06 3.102e+06 3.102e+06 ... 3.09e+06 3.09e+06\n", " * time (time) datetime64[ns] 2021-06-02T12:05:57.441074 ... 2022-05-21T..." ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pc_new" ] }, { "cell_type": "code", "execution_count": 38, "id": "51b9d063-895b-48b0-b2b0-b8e4dee4d8bc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'stackstac-6805d1700af7afbc3f34ddbf3b38393f' (time: 84,\n",
       "                                                                y: 396, x: 290)>\n",
       "dask.array<getitem, shape=(84, 396, 290), dtype=float64, chunksize=(1, 396, 290), chunktype=numpy.ndarray>\n",
       "Coordinates: (12/41)\n",
       "  * time                                   (time) datetime64[ns] 2021-06-02T1...\n",
       "    id                                     (time) <U66 'S1A_IW_GRDH_1SDV_2021...\n",
       "    band                                   <U2 'vv'\n",
       "    sat:platform_international_designator  <U9 '2014-016A'\n",
       "    s1:datatake_id                         (time) <U6 '295165' ... '338944'\n",
       "    s1:instrument_configuration_ID         (time) <U1 '6' '6' '6' ... '7' '7'\n",
       "    ...                                     ...\n",
       "    raster:bands                           object {'nodata': -32768, 'data_ty...\n",
       "    epsg                                   int64 32645\n",
       "    granule_id                             (time) <U62 'S1A_IW_GRDH_1SDV_2021...\n",
       "    data_take_id                           (time) <U6 '0480FD' ... '052C00'\n",
       "  * x                                      (x) float64 6.194e+05 ... 6.281e+05\n",
       "  * y                                      (y) float64 3.102e+06 ... 3.09e+06\n",
       "Attributes:\n",
       "    spec:        RasterSpec(epsg=32645, bounds=(619420.0, 3089780.0, 628110.0...\n",
       "    crs:         epsg:32645\n",
       "    transform:   | 10.00, 0.00, 619420.00|\\n| 0.00,-10.00, 3101660.00|\\n| 0.0...\n",
       "    resolution:  10.0
" ], "text/plain": [ "\n", "dask.array\n", "Coordinates: (12/41)\n", " * time (time) datetime64[ns] 2021-06-02T1...\n", " id (time) \u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m pc_new[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvv\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m pc_downsample\u001b[38;5;241m.\u001b[39msel(band\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvv\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39mdata\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/dataarray.py:776\u001b[0m, in \u001b[0;36mDataArray.__setitem__\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m 774\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__setitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, key: Any, value: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 775\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m--> 776\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcoords[key] \u001b[38;5;241m=\u001b[39m value\n\u001b[1;32m 777\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 778\u001b[0m \u001b[38;5;66;03m# Coordinates in key, value and self[key] should be consistent.\u001b[39;00m\n\u001b[1;32m 779\u001b[0m \u001b[38;5;66;03m# TODO Coordinate consistency in key is checked here, but it\u001b[39;00m\n\u001b[1;32m 780\u001b[0m \u001b[38;5;66;03m# causes unnecessary indexing. It should be optimized.\u001b[39;00m\n\u001b[1;32m 781\u001b[0m obj \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m[key]\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/coordinates.py:32\u001b[0m, in \u001b[0;36mCoordinates.__setitem__\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__setitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, key: Hashable, value: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m---> 32\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/coordinates.py:162\u001b[0m, in \u001b[0;36mCoordinates.update\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 160\u001b[0m other_vars \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(other, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvariables\u001b[39m\u001b[38;5;124m\"\u001b[39m, other)\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_drop_multiindex_coords(\u001b[38;5;28mset\u001b[39m(other_vars))\n\u001b[0;32m--> 162\u001b[0m coords, indexes \u001b[38;5;241m=\u001b[39m \u001b[43mmerge_coords\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 163\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mother_vars\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpriority_arg\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindexes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mxindexes\u001b[49m\n\u001b[1;32m 164\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_update_coords(coords, indexes)\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/merge.py:564\u001b[0m, in \u001b[0;36mmerge_coords\u001b[0;34m(objects, compat, join, priority_arg, indexes, fill_value)\u001b[0m\n\u001b[1;32m 560\u001b[0m coerced \u001b[38;5;241m=\u001b[39m coerce_pandas_values(objects)\n\u001b[1;32m 561\u001b[0m aligned \u001b[38;5;241m=\u001b[39m deep_align(\n\u001b[1;32m 562\u001b[0m coerced, join\u001b[38;5;241m=\u001b[39mjoin, copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, indexes\u001b[38;5;241m=\u001b[39mindexes, fill_value\u001b[38;5;241m=\u001b[39mfill_value\n\u001b[1;32m 563\u001b[0m )\n\u001b[0;32m--> 564\u001b[0m collected \u001b[38;5;241m=\u001b[39m \u001b[43mcollect_variables_and_indexes\u001b[49m\u001b[43m(\u001b[49m\u001b[43maligned\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 565\u001b[0m prioritized \u001b[38;5;241m=\u001b[39m _get_priority_vars_and_indexes(aligned, priority_arg, compat\u001b[38;5;241m=\u001b[39mcompat)\n\u001b[1;32m 566\u001b[0m variables, out_indexes \u001b[38;5;241m=\u001b[39m merge_collected(collected, prioritized, compat\u001b[38;5;241m=\u001b[39mcompat)\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/merge.py:365\u001b[0m, in \u001b[0;36mcollect_variables_and_indexes\u001b[0;34m(list_of_mappings, indexes)\u001b[0m\n\u001b[1;32m 362\u001b[0m indexes\u001b[38;5;241m.\u001b[39mpop(name, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[1;32m 363\u001b[0m append_all(coords, indexes)\n\u001b[0;32m--> 365\u001b[0m variable \u001b[38;5;241m=\u001b[39m \u001b[43mas_variable\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvariable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 366\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m indexes:\n\u001b[1;32m 367\u001b[0m append(name, variable, indexes[name])\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/variable.py:147\u001b[0m, in \u001b[0;36mas_variable\u001b[0;34m(obj, name)\u001b[0m\n\u001b[1;32m 145\u001b[0m data \u001b[38;5;241m=\u001b[39m as_compatible_data(obj)\n\u001b[1;32m 146\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m--> 147\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MissingDimensionsError(\n\u001b[1;32m 148\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcannot set variable \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mname\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m with \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdata\u001b[38;5;241m.\u001b[39mndim\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m-dimensional data \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwithout explicit dimension names. Pass a tuple of \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 150\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(dims, data) instead.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 151\u001b[0m )\n\u001b[1;32m 152\u001b[0m obj \u001b[38;5;241m=\u001b[39m Variable(name, data, fastpath\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 153\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", "\u001b[0;31mMissingDimensionsError\u001b[0m: cannot set variable 'vv' with 3-dimensional data without explicit dimension names. Pass a tuple of (dims, data) instead." ] } ], "source": [ "pc_new['vv'] = pc_downsample.sel(band='vv').data" ] }, { "cell_type": "code", "execution_count": 39, "id": "3caee914-264a-4b62-92ca-389ff41f17ce", "metadata": {}, "outputs": [], "source": [ "vv = pc_mask.vv\n", "clip_vv = vv[0,:,:,:,:]" ] }, { "cell_type": "code", "execution_count": null, "id": "78a26c9e-c321-4eb6-8370-457ef9ef308d", "metadata": {}, "outputs": [], "source": [ "pc_mask = pc_mask.reset_index('acq_date', drop=True)" ] }, { "cell_type": "code", "execution_count": 43, "id": "e4765417-120b-46fa-a394-a0cd0c77cf9d", "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", "
Array Chunk
Bytes 73.60 MiB 897.19 kiB
Shape (396, 290, 84) (396, 290, 1)
Count 41 Graph Layers 84 Chunks
Type float64 numpy.ndarray
\n", "
\n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 84\n", " 290\n", " 396\n", "\n", "
" ], "text/plain": [ "dask.array" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clip_vv.sel(band='vv').data" ] }, { "cell_type": "code", "execution_count": 44, "id": "d5f1eacf-e324-487a-84f1-752202709e79", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "conflicting sizes for dimension 'x': length 396 on the data but length 290 on coordinate 'x'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Input \u001b[0;32mIn [44]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m pc_new_vv \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDataArray\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mclip_vv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mband\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mcoords\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpc_downsample\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43my\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43mpc_downsample\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43my\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtime\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43mpc_downsample\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalues\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43mdims\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43my\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtime\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/dataarray.py:412\u001b[0m, in \u001b[0;36mDataArray.__init__\u001b[0;34m(self, data, coords, dims, name, attrs, indexes, fastpath)\u001b[0m\n\u001b[1;32m 410\u001b[0m data \u001b[38;5;241m=\u001b[39m _check_data_shape(data, coords, dims)\n\u001b[1;32m 411\u001b[0m data \u001b[38;5;241m=\u001b[39m as_compatible_data(data)\n\u001b[0;32m--> 412\u001b[0m coords, dims \u001b[38;5;241m=\u001b[39m \u001b[43m_infer_coords_and_dims\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshape\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcoords\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdims\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 413\u001b[0m variable \u001b[38;5;241m=\u001b[39m Variable(dims, data, attrs, fastpath\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 414\u001b[0m indexes, coords \u001b[38;5;241m=\u001b[39m _create_indexes_from_coords(coords)\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/dataarray.py:160\u001b[0m, in \u001b[0;36m_infer_coords_and_dims\u001b[0;34m(shape, coords, dims)\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m d, s \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(v\u001b[38;5;241m.\u001b[39mdims, v\u001b[38;5;241m.\u001b[39mshape):\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m s \u001b[38;5;241m!=\u001b[39m sizes[d]:\n\u001b[0;32m--> 160\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 161\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mconflicting sizes for dimension \u001b[39m\u001b[38;5;132;01m{\u001b[39;00md\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 162\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlength \u001b[39m\u001b[38;5;132;01m{\u001b[39;00msizes[d]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m on the data but length \u001b[39m\u001b[38;5;132;01m{\u001b[39;00ms\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m on \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 163\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcoordinate \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mk\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 164\u001b[0m )\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m k \u001b[38;5;129;01min\u001b[39;00m sizes \u001b[38;5;129;01mand\u001b[39;00m v\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;241m!=\u001b[39m (sizes[k],):\n\u001b[1;32m 167\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 168\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcoordinate \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mk\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m is a DataArray dimension, but \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 169\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mit has shape \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mv\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m rather than expected shape \u001b[39m\u001b[38;5;132;01m{\u001b[39;00msizes[k]\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 170\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmatching the dimension size\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 171\u001b[0m )\n", "\u001b[0;31mValueError\u001b[0m: conflicting sizes for dimension 'x': length 396 on the data but length 290 on coordinate 'x'" ] } ], "source": [ "pc_new_vv = xr.DataArray(\n", " clip_vv.sel(band='vv').data,\n", " coords = {'x': pc_downsample.x.values,\n", " 'y':pc_downsample.y.values,\n", " 'time':pc_downsample.time.values},\n", " dims = ('x','y','time'),\n", ")" ] }, { "cell_type": "markdown", "id": "75cada2f-6e50-45b5-ba0d-6bd04504d106", "metadata": {}, "source": [ "^^ x,y dims are flipped?" ] }, { "cell_type": "code", "execution_count": 47, "id": "86215425-5401-4678-bed7-ed7d3f29072f", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "axes don't match array", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Input \u001b[0;32mIn [47]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m pc_new_vv \u001b[38;5;241m=\u001b[39m xr\u001b[38;5;241m.\u001b[39mDataArray(\n\u001b[0;32m----> 2\u001b[0m \u001b[43mclip_vv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mband\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtranspose\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43my\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 3\u001b[0m coords \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mx\u001b[39m\u001b[38;5;124m'\u001b[39m: pc_downsample\u001b[38;5;241m.\u001b[39mx\u001b[38;5;241m.\u001b[39mvalues,\n\u001b[1;32m 4\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124my\u001b[39m\u001b[38;5;124m'\u001b[39m:pc_downsample\u001b[38;5;241m.\u001b[39my\u001b[38;5;241m.\u001b[39mvalues,\n\u001b[1;32m 5\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m'\u001b[39m:pc_downsample\u001b[38;5;241m.\u001b[39mtime\u001b[38;5;241m.\u001b[39mvalues},\n\u001b[1;32m 6\u001b[0m dims \u001b[38;5;241m=\u001b[39m (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mx\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124my\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtime\u001b[39m\u001b[38;5;124m'\u001b[39m),\n\u001b[1;32m 7\u001b[0m )\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/core.py:2144\u001b[0m, in \u001b[0;36mArray.transpose\u001b[0;34m(self, *axes)\u001b[0m\n\u001b[1;32m 2142\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\n\u001b[1;32m 2143\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 2144\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtranspose\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxes\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/dask/array/routines.py:183\u001b[0m, in \u001b[0;36mtranspose\u001b[0;34m(a, axes)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m axes:\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(axes) \u001b[38;5;241m!=\u001b[39m a\u001b[38;5;241m.\u001b[39mndim:\n\u001b[0;32m--> 183\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maxes don\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt match array\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 184\u001b[0m axes \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(d \u001b[38;5;241m+\u001b[39m a\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;28;01mif\u001b[39;00m d \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m d \u001b[38;5;28;01mfor\u001b[39;00m d \u001b[38;5;129;01min\u001b[39;00m axes)\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", "\u001b[0;31mValueError\u001b[0m: axes don't match array" ] } ], "source": [ "pc_new_vv = xr.DataArray(\n", " clip_vv.sel(band='vv').data.transpose(['x','y']),\n", " coords = {'x': pc_downsample.x.values,\n", " 'y':pc_downsample.y.values,\n", " 'time':pc_downsample.time.values},\n", " dims = ('x','y','time'),\n", ")" ] }, { "cell_type": "code", "execution_count": 55, "id": "1abd179c-6a70-462e-9f79-9da2a8711a45", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "('x', 'y') must be a permuted list of ('y', 'x', 'time'), unless `...` is included", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Input \u001b[0;32mIn [55]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mclip_vv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mband\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtranspose\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43my\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/dataarray.py:2509\u001b[0m, in \u001b[0;36mDataArray.transpose\u001b[0;34m(self, transpose_coords, missing_dims, *dims)\u001b[0m\n\u001b[1;32m 2476\u001b[0m \u001b[38;5;124;03m\"\"\"Return a new DataArray object with transposed dimensions.\u001b[39;00m\n\u001b[1;32m 2477\u001b[0m \n\u001b[1;32m 2478\u001b[0m \u001b[38;5;124;03mParameters\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2506\u001b[0m \u001b[38;5;124;03mDataset.transpose\u001b[39;00m\n\u001b[1;32m 2507\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2508\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m dims:\n\u001b[0;32m-> 2509\u001b[0m dims \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mtuple\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mutils\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minfix_dims\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdims\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdims\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmissing_dims\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2510\u001b[0m variable \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvariable\u001b[38;5;241m.\u001b[39mtranspose(\u001b[38;5;241m*\u001b[39mdims)\n\u001b[1;32m 2511\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m transpose_coords:\n", "File \u001b[0;32m~/miniconda3/envs/sentinel/lib/python3.10/site-packages/xarray/core/utils.py:808\u001b[0m, in \u001b[0;36minfix_dims\u001b[0;34m(dims_supplied, dims_all, missing_dims)\u001b[0m\n\u001b[1;32m 806\u001b[0m existing_dims \u001b[38;5;241m=\u001b[39m drop_missing_dims(dims_supplied, dims_all, missing_dims)\n\u001b[1;32m 807\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mset\u001b[39m(existing_dims) \u001b[38;5;241m^\u001b[39m \u001b[38;5;28mset\u001b[39m(dims_all):\n\u001b[0;32m--> 808\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 809\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdims_supplied\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m must be a permuted list of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdims_all\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, unless `...` is included\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 810\u001b[0m )\n\u001b[1;32m 811\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m existing_dims\n", "\u001b[0;31mValueError\u001b[0m: ('x', 'y') must be a permuted list of ('y', 'x', 'time'), unless `...` is included" ] } ], "source": [ "clip_vv.sel(band='vv').transpose('x','y')" ] }, { "cell_type": "code", "execution_count": null, "id": "fab4d165-e5a7-43ac-9eeb-6e7e0f845926", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.5" } }, "nbformat": 4, "nbformat_minor": 5 }