Created
May 29, 2021 11:47
-
-
Save willirath/cfaa8fb1b53fcb8dcb05ddde839c794c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "gothic-cincinnati", | |
"metadata": {}, | |
"source": [ | |
"# Putting the cov calculation into one line\n", | |
"\n", | |
"We'll use:\n", | |
"```python\n", | |
"cov = (\n", | |
" (X * Y).mean(\"t\") \n", | |
" - (\n", | |
" X.where(Y.notnull()).mean(\"t\")\n", | |
" * Y.where(X.notnull()).mean(\"t\")\n", | |
" )\n", | |
")\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "olympic-reaction", | |
"metadata": {}, | |
"source": [ | |
"## Some data\n", | |
"\n", | |
"We'll have `X` and `Y` which share an overlapping dimension `t` of different length and which have different sets of missing values." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "arbitrary-healing", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import xarray as xr\n", | |
"import dask.array\n", | |
"import numpy as np" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "qualified-birth", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"length_t, chunk_t = 365, 73\n", | |
"length_x, chunk_x = 10, 10\n", | |
"length_y, chunk_y = 20, 20\n", | |
"\n", | |
"scale_X, offset_X = 10.0, 3.0\n", | |
"scale_Y, offset_Y = 3.0, -5.0\n", | |
"\n", | |
"invalid_frac = 0.3\n", | |
"\n", | |
"slice_t_X = slice(5, None)\n", | |
"slice_t_Y = slice(None, -7)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "settled-superintendent", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray 'X' (t: 360, x: 10)>\n", | |
"dask.array<getitem, shape=(360, 10), dtype=float64, chunksize=(73, 10), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * t (t) int64 5 6 7 8 9 10 11 12 13 ... 357 358 359 360 361 362 363 364\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'X'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>t</span>: 360</li><li><span class='xr-has-index'>x</span>: 10</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-dd6abb11-4072-41b9-9bd0-782046524c2f' class='xr-array-in' type='checkbox' checked><label for='section-dd6abb11-4072-41b9-9bd0-782046524c2f' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array<chunksize=(68, 10), meta=np.ndarray></span></div><div class='xr-array-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 28.80 kB </td> <td> 5.84 kB </td></tr>\n", | |
" <tr><th> Shape </th><td> (360, 10) </td> <td> (73, 10) </td></tr>\n", | |
" <tr><th> Count </th><td> 35 Tasks </td><td> 5 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"80\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"30\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"22\" x2=\"30\" y2=\"22\" />\n", | |
" <line x1=\"0\" y1=\"47\" x2=\"30\" y2=\"47\" />\n", | |
" <line x1=\"0\" y1=\"71\" x2=\"30\" y2=\"71\" />\n", | |
" <line x1=\"0\" y1=\"95\" x2=\"30\" y2=\"95\" />\n", | |
" <line x1=\"0\" y1=\"120\" x2=\"30\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"30\" y1=\"0\" x2=\"30\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.000000,0.000000 30.931823,0.000000 30.931823,120.000000 0.000000,120.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"15.465911\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10</text>\n", | |
" <text x=\"50.931823\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,50.931823,60.000000)\">360</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></div></li><li class='xr-section-item'><input id='section-098002ef-8f37-44ae-a753-21e31b37c31e' class='xr-section-summary-in' type='checkbox' checked><label for='section-098002ef-8f37-44ae-a753-21e31b37c31e' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>t</span></div><div class='xr-var-dims'>(t)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>5 6 7 8 9 ... 360 361 362 363 364</div><input id='attrs-58af2068-08fa-4b6b-86b1-6135a22fc385' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-58af2068-08fa-4b6b-86b1-6135a22fc385' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d6815a6c-eb09-433d-8ddb-aedda7292f8e' class='xr-var-data-in' type='checkbox'><label for='data-d6815a6c-eb09-433d-8ddb-aedda7292f8e' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 5, 6, 7, ..., 362, 363, 364])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 7 8 9</div><input id='attrs-ed64e78f-6e27-4dae-9013-e788a22d7fee' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ed64e78f-6e27-4dae-9013-e788a22d7fee' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a25b47a4-ad20-497e-a3b0-dd15f1f00709' class='xr-var-data-in' type='checkbox'><label for='data-a25b47a4-ad20-497e-a3b0-dd15f1f00709' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-943b9e79-860d-4524-b141-a940df79d5ca' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-943b9e79-860d-4524-b141-a940df79d5ca' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray 'X' (t: 360, x: 10)>\n", | |
"dask.array<getitem, shape=(360, 10), dtype=float64, chunksize=(73, 10), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * t (t) int64 5 6 7 8 9 10 11 12 13 ... 357 358 359 360 361 362 363 364\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"X = xr.DataArray(\n", | |
" scale_X * dask.array.random.normal(\n", | |
" size=(length_t, length_x),\n", | |
" chunks=(chunk_t, chunk_x),\n", | |
" ) * offset_X,\n", | |
" dims=(\"t\", \"x\"),\n", | |
" coords={\n", | |
" \"t\": (\"t\", np.arange(length_t)),\n", | |
" \"x\": (\"x\", np.arange(length_x)),\n", | |
" },\n", | |
" name=\"X\",\n", | |
")\n", | |
"\n", | |
"X = X.where(\n", | |
" invalid_frac < dask.array.random.random(\n", | |
" size=(length_t, length_x),\n", | |
" chunks=(chunk_t, chunk_x),\n", | |
" )\n", | |
")\n", | |
"\n", | |
"X = X.isel(t=slice_t_X)\n", | |
"\n", | |
"display(X)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "representative-recommendation", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray 'Y' (t: 358, y: 20)>\n", | |
"dask.array<getitem, shape=(358, 20), dtype=float64, chunksize=(73, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * t (t) int64 0 1 2 3 4 5 6 7 8 ... 349 350 351 352 353 354 355 356 357\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'Y'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>t</span>: 358</li><li><span class='xr-has-index'>y</span>: 20</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-cf885cf1-10ae-407d-9e07-2101da0d425f' class='xr-array-in' type='checkbox' checked><label for='section-cf885cf1-10ae-407d-9e07-2101da0d425f' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array<chunksize=(73, 20), meta=np.ndarray></span></div><div class='xr-array-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 57.28 kB </td> <td> 11.68 kB </td></tr>\n", | |
" <tr><th> Shape </th><td> (358, 20) </td> <td> (73, 20) </td></tr>\n", | |
" <tr><th> Count </th><td> 35 Tasks </td><td> 5 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"85\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"24\" x2=\"35\" y2=\"24\" />\n", | |
" <line x1=\"0\" y1=\"48\" x2=\"35\" y2=\"48\" />\n", | |
" <line x1=\"0\" y1=\"73\" x2=\"35\" y2=\"73\" />\n", | |
" <line x1=\"0\" y1=\"97\" x2=\"35\" y2=\"97\" />\n", | |
" <line x1=\"0\" y1=\"120\" x2=\"35\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.000000,0.000000 35.178776,0.000000 35.178776,120.000000 0.000000,120.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"17.589388\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >20</text>\n", | |
" <text x=\"55.178776\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,55.178776,60.000000)\">358</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></div></li><li class='xr-section-item'><input id='section-d204592a-1f4c-45ce-8b68-cfba0a05665e' class='xr-section-summary-in' type='checkbox' checked><label for='section-d204592a-1f4c-45ce-8b68-cfba0a05665e' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>t</span></div><div class='xr-var-dims'>(t)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 ... 353 354 355 356 357</div><input id='attrs-e676e157-8477-41e8-9471-ebb2f1abfb6f' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e676e157-8477-41e8-9471-ebb2f1abfb6f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-67b95d46-fa47-49ae-971c-5570f006e053' class='xr-var-data-in' type='checkbox'><label for='data-67b95d46-fa47-49ae-971c-5570f006e053' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, ..., 355, 356, 357])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 14 15 16 17 18 19</div><input id='attrs-9aa1e461-6359-47dd-b0d4-affa2f955d73' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9aa1e461-6359-47dd-b0d4-affa2f955d73' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1824d47b-0d13-4111-93e9-ec112fd97e5c' class='xr-var-data-in' type='checkbox'><label for='data-1824d47b-0d13-4111-93e9-ec112fd97e5c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", | |
" 18, 19])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-81209e83-24be-4c86-a754-ecdb2ed9119b' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-81209e83-24be-4c86-a754-ecdb2ed9119b' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray 'Y' (t: 358, y: 20)>\n", | |
"dask.array<getitem, shape=(358, 20), dtype=float64, chunksize=(73, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * t (t) int64 0 1 2 3 4 5 6 7 8 ... 349 350 351 352 353 354 355 356 357\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"Y = xr.DataArray(\n", | |
" scale_Y * dask.array.random.normal(\n", | |
" size=(length_t, length_y),\n", | |
" chunks=(chunk_t, chunk_y),\n", | |
" ) * offset_Y,\n", | |
" dims=(\"t\", \"y\"),\n", | |
" coords={\n", | |
" \"t\": (\"t\", np.arange(length_t)),\n", | |
" \"y\": (\"y\", np.arange(length_y)),\n", | |
" },\n", | |
" name=\"Y\",\n", | |
")\n", | |
"\n", | |
"Y = Y.where(\n", | |
" invalid_frac < dask.array.random.random(\n", | |
" size=(length_t, length_y),\n", | |
" chunks=(chunk_t, chunk_y),\n", | |
" )\n", | |
")\n", | |
"\n", | |
"Y = Y.isel(t=slice_t_Y)\n", | |
"\n", | |
"display(Y)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "wooden-incentive", | |
"metadata": {}, | |
"source": [ | |
"## Covariance\n", | |
"\n", | |
"Note how we cross-mask explicitly. (Not sure if this is the best way to do it.)\n", | |
"\n", | |
"Also note how we don't align. (Again not sure if this is good.)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "looking-wales", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"cov = (\n", | |
" (X * Y).mean(\"t\") \n", | |
" - (\n", | |
" X.where(Y.notnull()).mean(\"t\")\n", | |
" * Y.where(X.notnull()).mean(\"t\")\n", | |
" )\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "verified-lesbian", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<sub, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>x</span>: 10</li><li><span class='xr-has-index'>y</span>: 20</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-f62d82f3-6c4b-4630-bfab-8b34a4954ed9' class='xr-array-in' type='checkbox' checked><label for='section-f62d82f3-6c4b-4630-bfab-8b34a4954ed9' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array<chunksize=(10, 20), meta=np.ndarray></span></div><div class='xr-array-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 1.60 kB </td> <td> 1.60 kB </td></tr>\n", | |
" <tr><th> Shape </th><td> (10, 20) </td> <td> (10, 20) </td></tr>\n", | |
" <tr><th> Count </th><td> 192 Tasks </td><td> 1 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"110\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"60\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.000000,0.000000 120.000000,0.000000 120.000000,60.000000 0.000000,60.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"80.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >20</text>\n", | |
" <text x=\"140.000000\" y=\"30.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,30.000000)\">10</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></div></li><li class='xr-section-item'><input id='section-7aefab8d-dfc8-4c14-b2f3-35b268b4ba24' class='xr-section-summary-in' type='checkbox' checked><label for='section-7aefab8d-dfc8-4c14-b2f3-35b268b4ba24' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 7 8 9</div><input id='attrs-70c680e4-5d99-4b29-bc7a-458f0e2c87b3' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-70c680e4-5d99-4b29-bc7a-458f0e2c87b3' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6d1489e0-c1af-45fc-a500-66f7e221abac' class='xr-var-data-in' type='checkbox'><label for='data-6d1489e0-c1af-45fc-a500-66f7e221abac' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 14 15 16 17 18 19</div><input id='attrs-ddcf950a-0e24-42d1-b2ef-b8068037fa84' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ddcf950a-0e24-42d1-b2ef-b8068037fa84' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9cbfc2b5-e923-4e1b-82f5-ae9e7d12f6e7' class='xr-var-data-in' type='checkbox'><label for='data-9cbfc2b5-e923-4e1b-82f5-ae9e7d12f6e7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", | |
" 18, 19])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-2fc62ad2-9b5e-42f3-a9c3-dadfb4f70e0e' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-2fc62ad2-9b5e-42f3-a9c3-dadfb4f70e0e' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<sub, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cov" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "inappropriate-spell", | |
"metadata": {}, | |
"source": [ | |
"## Correlation\n", | |
"\n", | |
"Again, note the cross-masking." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "intelligent-humanity", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"corr = (\n", | |
" cov \n", | |
" / X.where(Y.notnull()).std(\"t\") \n", | |
" / Y.where(X.notnull()).std(\"t\")\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "controlling-handling", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>x</span>: 10</li><li><span class='xr-has-index'>y</span>: 20</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-2a41c80f-d291-4e9e-bde4-0dfa1a6b836b' class='xr-array-in' type='checkbox' checked><label for='section-2a41c80f-d291-4e9e-bde4-0dfa1a6b836b' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array<chunksize=(10, 20), meta=np.ndarray></span></div><div class='xr-array-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 1.60 kB </td> <td> 1.60 kB </td></tr>\n", | |
" <tr><th> Shape </th><td> (10, 20) </td> <td> (10, 20) </td></tr>\n", | |
" <tr><th> Count </th><td> 213 Tasks </td><td> 1 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"110\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"60\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.000000,0.000000 120.000000,0.000000 120.000000,60.000000 0.000000,60.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"80.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >20</text>\n", | |
" <text x=\"140.000000\" y=\"30.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,30.000000)\">10</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></div></li><li class='xr-section-item'><input id='section-c0915663-d2c7-4887-ba85-bf8c82863c98' class='xr-section-summary-in' type='checkbox' checked><label for='section-c0915663-d2c7-4887-ba85-bf8c82863c98' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 7 8 9</div><input id='attrs-4468de77-af7e-49de-9288-6861517e6515' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4468de77-af7e-49de-9288-6861517e6515' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8c7a06fc-06fb-42cd-bb82-97837e2d69ec' class='xr-var-data-in' type='checkbox'><label for='data-8c7a06fc-06fb-42cd-bb82-97837e2d69ec' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 14 15 16 17 18 19</div><input id='attrs-0dc29a94-684a-459d-ad53-d00bff3137e2' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-0dc29a94-684a-459d-ad53-d00bff3137e2' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-94ae5575-933f-4d1a-a851-354ef7294a7c' class='xr-var-data-in' type='checkbox'><label for='data-94ae5575-933f-4d1a-a851-354ef7294a7c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", | |
" 18, 19])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-6c24ab1f-e9d3-468a-b4a8-6b9e5ae6e836' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-6c24ab1f-e9d3-468a-b4a8-6b9e5ae6e836' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"corr" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "noble-fourth", | |
"metadata": {}, | |
"source": [ | |
"## Maybe account for ddof" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "absent-calcium", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"ddof = 1\n", | |
"\n", | |
"if ddof != 0:\n", | |
" norm_ddof = 1 / (\n", | |
" 1 - ddof / (X.notnull() & Y.notnull()).sum(\"t\")\n", | |
" )\n", | |
" norm_ddof\n", | |
"else:\n", | |
" norm_ddof = 1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "equivalent-measurement", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"cov_norm = cov * norm_ddof" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "expressed-nancy", | |
"metadata": {}, | |
"source": [ | |
"## Compare to existing xarray implementation" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "similar-rescue", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>x</span>: 10</li><li><span class='xr-has-index'>y</span>: 20</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-6dd5bf91-14f1-4f98-8f9c-9dcf0a55a13f' class='xr-array-in' type='checkbox' checked><label for='section-6dd5bf91-14f1-4f98-8f9c-9dcf0a55a13f' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array<chunksize=(10, 20), meta=np.ndarray></span></div><div class='xr-array-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 1.60 kB </td> <td> 1.60 kB </td></tr>\n", | |
" <tr><th> Shape </th><td> (10, 20) </td> <td> (10, 20) </td></tr>\n", | |
" <tr><th> Count </th><td> 249 Tasks </td><td> 1 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"110\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"60\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.000000,0.000000 120.000000,0.000000 120.000000,60.000000 0.000000,60.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"80.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >20</text>\n", | |
" <text x=\"140.000000\" y=\"30.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,30.000000)\">10</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></div></li><li class='xr-section-item'><input id='section-b0249418-970f-49ae-9e48-3899529929ab' class='xr-section-summary-in' type='checkbox' checked><label for='section-b0249418-970f-49ae-9e48-3899529929ab' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 7 8 9</div><input id='attrs-aa3c1614-9db9-4b65-a791-9ac395083468' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-aa3c1614-9db9-4b65-a791-9ac395083468' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6fd4f5f8-706c-476d-af3d-f3676023e4b8' class='xr-var-data-in' type='checkbox'><label for='data-6fd4f5f8-706c-476d-af3d-f3676023e4b8' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 14 15 16 17 18 19</div><input id='attrs-4378e718-61d5-4bcf-9a15-f4ac4bb5ffb3' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4378e718-61d5-4bcf-9a15-f4ac4bb5ffb3' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-89c1d820-ba3a-4e72-ac2e-958a32635880' class='xr-var-data-in' type='checkbox'><label for='data-89c1d820-ba3a-4e72-ac2e-958a32635880' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", | |
" 18, 19])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-c375b608-eb9a-478b-aa74-d5465744a21a' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-c375b608-eb9a-478b-aa74-d5465744a21a' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"corr_xr = xr.corr(X, Y, dim=\"t\")\n", | |
"corr_xr" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"id": "tamil-argument", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>x</span>: 10</li><li><span class='xr-has-index'>y</span>: 20</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-f17800c9-6c5f-4401-8bbe-4563b55a53a2' class='xr-array-in' type='checkbox' checked><label for='section-f17800c9-6c5f-4401-8bbe-4563b55a53a2' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array<chunksize=(10, 20), meta=np.ndarray></span></div><div class='xr-array-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 1.60 kB </td> <td> 1.60 kB </td></tr>\n", | |
" <tr><th> Shape </th><td> (10, 20) </td> <td> (10, 20) </td></tr>\n", | |
" <tr><th> Count </th><td> 228 Tasks </td><td> 1 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"110\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"60\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.000000,0.000000 120.000000,0.000000 120.000000,60.000000 0.000000,60.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"80.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >20</text>\n", | |
" <text x=\"140.000000\" y=\"30.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,30.000000)\">10</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></div></li><li class='xr-section-item'><input id='section-4b9dca57-8950-416d-9a39-3abbd57e1d0e' class='xr-section-summary-in' type='checkbox' checked><label for='section-4b9dca57-8950-416d-9a39-3abbd57e1d0e' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 7 8 9</div><input id='attrs-45bf2ba4-6b59-44b6-b7b2-8c6b1fc74551' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-45bf2ba4-6b59-44b6-b7b2-8c6b1fc74551' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8d37de58-31fb-4065-975f-f24cd91989a0' class='xr-var-data-in' type='checkbox'><label for='data-8d37de58-31fb-4065-975f-f24cd91989a0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 14 15 16 17 18 19</div><input id='attrs-d8de57da-11af-4bbe-8ef8-83e3b0e34888' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-d8de57da-11af-4bbe-8ef8-83e3b0e34888' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4087a76c-ca4c-4777-ae96-34fa62820cf0' class='xr-var-data-in' type='checkbox'><label for='data-4087a76c-ca4c-4777-ae96-34fa62820cf0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", | |
" 18, 19])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-d673c027-a74e-4766-b6b7-41b4424e4809' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-d673c027-a74e-4766-b6b7-41b4424e4809' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cov_xr = xr.cov(X, Y, dim=\"t\", ddof=0)\n", | |
"cov_xr" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"id": "curious-murray", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>x</span>: 10</li><li><span class='xr-has-index'>y</span>: 20</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-2fca6c24-86ec-4f6f-96ea-bde3437e5e7b' class='xr-array-in' type='checkbox' checked><label for='section-2fca6c24-86ec-4f6f-96ea-bde3437e5e7b' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array<chunksize=(10, 20), meta=np.ndarray></span></div><div class='xr-array-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 1.60 kB </td> <td> 1.60 kB </td></tr>\n", | |
" <tr><th> Shape </th><td> (10, 20) </td> <td> (10, 20) </td></tr>\n", | |
" <tr><th> Count </th><td> 228 Tasks </td><td> 1 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"110\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"60\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"60\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.000000,0.000000 120.000000,0.000000 120.000000,60.000000 0.000000,60.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"80.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >20</text>\n", | |
" <text x=\"140.000000\" y=\"30.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,30.000000)\">10</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></div></li><li class='xr-section-item'><input id='section-15d703a3-6a88-420d-b09c-9d6a28c7dfce' class='xr-section-summary-in' type='checkbox' checked><label for='section-15d703a3-6a88-420d-b09c-9d6a28c7dfce' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 7 8 9</div><input id='attrs-87350930-f2d4-4c27-81f8-331be99a0f68' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-87350930-f2d4-4c27-81f8-331be99a0f68' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5ac530e3-2b14-401c-9ab2-21ca6b935c1b' class='xr-var-data-in' type='checkbox'><label for='data-5ac530e3-2b14-401c-9ab2-21ca6b935c1b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 14 15 16 17 18 19</div><input id='attrs-0863e18e-fbfb-468b-920e-ccbc6cd1370d' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-0863e18e-fbfb-468b-920e-ccbc6cd1370d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e82985bf-38df-4b96-a128-434f318e8111' class='xr-var-data-in' type='checkbox'><label for='data-e82985bf-38df-4b96-a128-434f318e8111' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", | |
" 18, 19])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-35b33fde-aeee-4180-b050-8ae6ce2aef5c' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-35b33fde-aeee-4180-b050-8ae6ce2aef5c' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray (x: 10, y: 20)>\n", | |
"dask.array<truediv, shape=(10, 20), dtype=float64, chunksize=(10, 20), chunktype=numpy.ndarray>\n", | |
"Coordinates:\n", | |
" * x (x) int64 0 1 2 3 4 5 6 7 8 9\n", | |
" * y (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cov_norm_xr = xr.cov(X, Y, dim=\"t\", ddof=ddof)\n", | |
"cov_norm_xr" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "primary-redhead", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 1152x864 with 18 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"from matplotlib import pyplot as plt\n", | |
"\n", | |
"fig, ax = plt.subplots(\n", | |
" 3, 3, \n", | |
" figsize=(16, 12),\n", | |
" sharex=True, sharey=True,\n", | |
")\n", | |
"\n", | |
"corr.compute().plot(ax=ax[0, 0])\n", | |
"ax[0, 0].set_title(\"corr\")\n", | |
"\n", | |
"corr_xr.compute().plot(ax=ax[0, 1])\n", | |
"ax[0, 1].set_title(\"corr_xr\")\n", | |
"\n", | |
"(corr - corr_xr).compute().plot(ax=ax[0, 2])\n", | |
"ax[0, 2].set_title(\"corr - corr_xr\")\n", | |
"\n", | |
"cov.compute().plot(ax=ax[1, 0])\n", | |
"ax[1, 0].set_title(\"cov\")\n", | |
"\n", | |
"cov_xr.compute().plot(ax=ax[1, 1])\n", | |
"ax[1, 1].set_title(\"cov_xr\")\n", | |
"\n", | |
"(cov - cov_xr).compute().plot(ax=ax[1, 2])\n", | |
"ax[1, 2].set_title(\"cov - cov_xr\")\n", | |
"\n", | |
"cov_norm.compute().plot(ax=ax[2, 0])\n", | |
"ax[2, 0].set_title(\"cov_norm\")\n", | |
"\n", | |
"cov_norm_xr.compute().plot(ax=ax[2, 1])\n", | |
"ax[2, 1].set_title(\"cov_norm_xr\")\n", | |
"\n", | |
"(cov_norm - cov_norm_xr).compute().plot(ax=ax[2, 2])\n", | |
"ax[2, 2].set_title(\"cov_norm - cov_norm_xr\")\n", | |
"\n", | |
"fig.tight_layout();" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "beneficial-player", | |
"metadata": {}, | |
"source": [ | |
"## Relevant dependencies" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"id": "later-scope", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"INSTALLED VERSIONS\n", | |
"------------------\n", | |
"commit: None\n", | |
"python: 3.8.8 | packaged by conda-forge | (default, Feb 20 2021, 16:22:27) \n", | |
"[GCC 9.3.0]\n", | |
"python-bits: 64\n", | |
"OS: Linux\n", | |
"OS-release: 4.15.0-128-generic\n", | |
"machine: x86_64\n", | |
"processor: x86_64\n", | |
"byteorder: little\n", | |
"LC_ALL: en_US.UTF-8\n", | |
"LANG: en_US.UTF-8\n", | |
"LOCALE: ('en_US', 'UTF-8')\n", | |
"libhdf5: 1.10.6\n", | |
"libnetcdf: None\n", | |
"\n", | |
"xarray: 0.18.2\n", | |
"pandas: 1.0.5\n", | |
"numpy: 1.18.5\n", | |
"scipy: 1.6.2\n", | |
"netCDF4: None\n", | |
"pydap: None\n", | |
"h5netcdf: None\n", | |
"h5py: 3.2.1\n", | |
"Nio: None\n", | |
"zarr: None\n", | |
"cftime: None\n", | |
"nc_time_axis: None\n", | |
"PseudoNetCDF: None\n", | |
"rasterio: None\n", | |
"cfgrib: None\n", | |
"iris: None\n", | |
"bottleneck: 1.3.2\n", | |
"dask: 2.20.0\n", | |
"distributed: 2.30.1\n", | |
"matplotlib: 3.4.2\n", | |
"cartopy: None\n", | |
"seaborn: 0.11.1\n", | |
"numbagg: None\n", | |
"pint: None\n", | |
"setuptools: 49.6.0.post20210108\n", | |
"pip: 21.0.1\n", | |
"conda: None\n", | |
"pytest: None\n", | |
"IPython: 7.20.0\n", | |
"sphinx: None\n" | |
] | |
} | |
], | |
"source": [ | |
"xr.show_versions()" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"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.8.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment