Skip to content

Instantly share code, notes, and snippets.

@kathoef
Created January 13, 2021 17:58
Show Gist options
  • Save kathoef/2fbdfd19f29a03aed561e0f5f56d445a to your computer and use it in GitHub Desktop.
Save kathoef/2fbdfd19f29a03aed561e0f5f56d445a to your computer and use it in GitHub Desktop.
low xarray.corr() performance on big datasets
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import xarray, dask, numpy\n",
"import dask.distributed"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Open Dask cluster,"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/miniconda3/lib/python3.8/site-packages/distributed/node.py:151: UserWarning: Port 8787 is already in use.\n",
"Perhaps you already have a cluster running?\n",
"Hosting the HTTP server on port 43455 instead\n",
" warnings.warn(\n"
]
}
],
"source": [
"cluster = dask.distributed.LocalCluster(\n",
" n_workers=1,\n",
" threads_per_worker=4,\n",
" memory_limit='8GB',\n",
" ip='0.0.0.0'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"client = dask.distributed.Client(cluster)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table style=\"border: 2px solid white;\">\n",
"<tr>\n",
"<td style=\"vertical-align: top; border: 0px solid white\">\n",
"<h3 style=\"text-align: left;\">Client</h3>\n",
"<ul style=\"text-align: left; list-style: none; margin: 0; padding: 0;\">\n",
" <li><b>Scheduler: </b>tcp://10.199.124.111:39555</li>\n",
" <li><b>Dashboard: </b><a href='http://10.199.124.111:43455/status' target='_blank'>http://10.199.124.111:43455/status</a></li>\n",
"</ul>\n",
"</td>\n",
"<td style=\"vertical-align: top; border: 0px solid white\">\n",
"<h3 style=\"text-align: left;\">Cluster</h3>\n",
"<ul style=\"text-align: left; list-style:none; margin: 0; padding: 0;\">\n",
" <li><b>Workers: </b>1</li>\n",
" <li><b>Cores: </b>4</li>\n",
" <li><b>Memory: </b>8.00 GB</li>\n",
"</ul>\n",
"</td>\n",
"</tr>\n",
"</table>"
],
"text/plain": [
"<Client: 'tcp://10.199.124.111:39555' processes=1 threads=4, memory=8.00 GB>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"client"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define a correlation coefficient suitable for big data application,"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def calc_big_data_corr(a, b, dim):\n",
" a, b = xarray.align(a, b)\n",
" valid_values = a.notnull() & b.notnull()\n",
" a = a.where(valid_values)\n",
" b = b.where(valid_values)\n",
" c = (a * b).mean(dim) - ( a.mean(dim) * b.mean(dim) )\n",
" c /= a.std(dim)\n",
" c /= b.std(dim)\n",
" return c"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Check equivalence with xarray.corr() for unaligned data with nan-values,"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"length = 250; time = numpy.linspace(0, 2*numpy.pi, length)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"da_a = xarray.DataArray(\n",
" numpy.sin(time) + numpy.random.normal(0, 0.25, length),\n",
" coords=[time], dims=\"time\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"da_b = xarray.DataArray(\n",
" numpy.sin(time) + numpy.random.normal(0, 0.25, length),\n",
" coords=[time], dims=\"time\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def random_choice(fraction):\n",
" return numpy.sort(numpy.random.choice(length, size=int(length*fraction), replace=False))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# make sure data arrays are not aligned\n",
"da_a = da_a.isel(time=random_choice(0.8)) "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"# make sure nan-values are present\n",
"#mask = ~numpy.isin(numpy.arange(length), random_choice(0.2))\n",
"#da_b = da_b.where(mask) "
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# make sure there are nan-values present\n",
"da_b = da_b.where(da_b > 0)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 14.5 ms, sys: 2.26 ms, total: 16.7 ms\n",
"Wall time: 15.6 ms\n"
]
}
],
"source": [
"%%time\n",
"corr_orig = xarray.corr(da_a, da_b, \"time\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 56 µs, sys: 26 µs, total: 82 µs\n",
"Wall time: 83.9 µs\n"
]
},
{
"data": {
"text/plain": [
"array(0.61706519)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"corr_orig.compute().values"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.16 ms, sys: 627 µs, total: 3.79 ms\n",
"Wall time: 3.67 ms\n"
]
}
],
"source": [
"%%time\n",
"corr_big_data = calc_big_data_corr(da_a, da_b, \"time\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 55 µs, sys: 25 µs, total: 80 µs\n",
"Wall time: 82.3 µs\n"
]
},
{
"data": {
"text/plain": [
"array(0.61706519)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"corr_big_data.compute().values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now with bigger data,"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"da_a = xarray.DataArray(\n",
" dask.array.random.normal(size=(100_000, ), chunks=(200, ))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"da_b = xarray.DataArray(\n",
" dask.array.random.normal(size=(100_000, ), chunks=(200, ))\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"# make sure there are nan-values present\n",
"da_b = da_b.where(da_b > 0)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 5.23 s, sys: 248 ms, total: 5.47 s\n",
"Wall time: 9.88 s\n"
]
}
],
"source": [
"%%time\n",
"corr_orig = xarray.corr(da_a, da_b, dim=\"dim_0\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.92 s, sys: 197 ms, total: 4.12 s\n",
"Wall time: 8.5 s\n"
]
},
{
"data": {
"text/plain": [
"array(-0.00190346)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"corr_orig.compute().values"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 32.6 ms, sys: 8 µs, total: 32.6 ms\n",
"Wall time: 32 ms\n"
]
}
],
"source": [
"%%time\n",
"corr_big_data = calc_big_data_corr(da_a, da_b, dim=\"dim_0\")"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.66 s, sys: 166 ms, total: 3.83 s\n",
"Wall time: 7.91 s\n"
]
},
{
"data": {
"text/plain": [
"array(-0.00190346)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"corr_big_data.compute().values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python environment,"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"# packages in environment at /miniconda3:\n",
"#\n",
"# Name Version Build Channel\n",
"_libgcc_mutex 0.1 conda_forge conda-forge\n",
"_openmp_mutex 4.5 1_gnu conda-forge\n",
"aiohttp 3.7.3 py38h497a2fe_1 conda-forge\n",
"argon2-cffi 20.1.0 py38h497a2fe_2 conda-forge\n",
"asciitree 0.3.3 py_2 conda-forge\n",
"async-timeout 3.0.1 py_1000 conda-forge\n",
"async_generator 1.10 py_0 conda-forge\n",
"attrs 20.3.0 pyhd3deb0d_0 conda-forge\n",
"backcall 0.2.0 pyh9f0ad1d_0 conda-forge\n",
"backports 1.0 py_2 conda-forge\n",
"backports.functools_lru_cache 1.6.1 py_0 conda-forge\n",
"bleach 3.2.1 pyh9f0ad1d_0 conda-forge\n",
"bokeh 2.2.3 py38h578d9bd_0 conda-forge\n",
"brotlipy 0.7.0 py38h27cfd23_1003 \n",
"bzip2 1.0.8 h7f98852_4 conda-forge\n",
"c-ares 1.17.1 h36c2ea0_0 conda-forge\n",
"ca-certificates 2020.12.8 h06a4308_0 \n",
"cairo 1.16.0 h7979940_1007 conda-forge\n",
"cartopy 0.18.0 py38h9b98833_8 conda-forge\n",
"cartopy_offlinedata 0.2.3 pyh9f0ad1d_0 conda-forge\n",
"certifi 2020.12.5 py38h578d9bd_1 conda-forge\n",
"cffi 1.14.3 py38h261ae71_2 \n",
"cftime 1.3.0 py38h0b5ebd8_0 conda-forge\n",
"chardet 3.0.4 py38h06a4308_1003 \n",
"click 7.1.2 pyh9f0ad1d_0 conda-forge\n",
"cloudpickle 1.6.0 py_0 conda-forge\n",
"colorcet 2.0.2 py_0 \n",
"conda 4.9.2 py38h578d9bd_0 conda-forge\n",
"conda-package-handling 1.7.2 py38h03888b9_0 \n",
"cryptography 3.2.1 py38h3c74f83_1 \n",
"curl 7.71.1 he644dc0_8 conda-forge\n",
"cycler 0.10.0 py_2 conda-forge\n",
"cytoolz 0.11.0 py38h25fe258_1 conda-forge\n",
"dask 2020.12.0 pyhd8ed1ab_0 conda-forge\n",
"dask-core 2020.12.0 pyhd8ed1ab_0 conda-forge\n",
"dask-jobqueue 0.7.2 pyhd8ed1ab_0 conda-forge\n",
"dask-labextension 4.0.1 pyhd8ed1ab_0 conda-forge\n",
"dbus 1.13.18 hb2f20db_0 \n",
"decorator 4.4.2 py_0 conda-forge\n",
"defusedxml 0.6.0 py_0 conda-forge\n",
"distributed 2020.12.0 py38h578d9bd_0 conda-forge\n",
"entrypoints 0.3 py38h32f6830_1002 conda-forge\n",
"expat 2.2.10 he6710b0_2 \n",
"fasteners 0.16 pyhd3eb1b0_0 \n",
"fontconfig 2.13.1 h736d332_1003 conda-forge\n",
"freetype 2.10.4 he06d7ca_0 conda-forge\n",
"fribidi 1.0.10 h516909a_0 conda-forge\n",
"fsspec 0.8.5 pyhd8ed1ab_0 conda-forge\n",
"geos 3.8.1 he1b5a44_0 conda-forge\n",
"geoviews 1.5.0 py_0 conda-forge\n",
"gettext 0.19.8.1 h0b5b191_1005 conda-forge\n",
"git 2.30.0 pl5320h014a29a_0 conda-forge\n",
"glib 2.66.4 h709712a_1 conda-forge\n",
"graphite2 1.3.14 h23475e2_0 \n",
"graphviz 2.42.3 h0511662_0 conda-forge\n",
"gst-plugins-base 1.14.5 h0935bb2_2 conda-forge\n",
"gstreamer 1.18.2 h3560a44_1 conda-forge\n",
"harfbuzz 2.7.4 h5cf4720_0 conda-forge\n",
"hdf4 4.2.13 h10796ff_1004 conda-forge\n",
"hdf5 1.10.6 nompi_h6a2412b_1114 conda-forge\n",
"heapdict 1.0.1 py_0 conda-forge\n",
"holoviews 1.14.1 pyhd3deb0d_0 conda-forge\n",
"hvplot 0.7.0 pyhd3deb0d_0 conda-forge\n",
"icu 68.1 h58526e2_0 conda-forge\n",
"idna 2.10 py_0 \n",
"importlib-metadata 3.4.0 py38h578d9bd_0 conda-forge\n",
"importlib_metadata 3.4.0 hd8ed1ab_0 conda-forge\n",
"ipykernel 5.4.2 py38h81c977d_0 conda-forge\n",
"ipython 7.19.0 py38h81c977d_1 conda-forge\n",
"ipython_genutils 0.2.0 py_1 conda-forge\n",
"ipywidgets 7.6.3 pyhd3deb0d_0 conda-forge\n",
"jedi 0.17.2 py38h578d9bd_1 conda-forge\n",
"jinja2 2.11.2 pyh9f0ad1d_0 conda-forge\n",
"joblib 1.0.0 pyhd8ed1ab_0 conda-forge\n",
"jpeg 9d h516909a_0 conda-forge\n",
"json5 0.9.5 pyh9f0ad1d_0 conda-forge\n",
"jsonschema 3.2.0 py38h32f6830_1 conda-forge\n",
"jupyter 1.0.0 py_2 conda-forge\n",
"jupyter-server-proxy 1.5.3 pyhd8ed1ab_0 conda-forge\n",
"jupyter_client 6.1.11 pyhd8ed1ab_1 conda-forge\n",
"jupyter_console 6.2.0 py_0 conda-forge\n",
"jupyter_core 4.7.0 py38h578d9bd_0 conda-forge\n",
"jupyterlab 2.2.9 py_0 conda-forge\n",
"jupyterlab_pygments 0.1.2 pyh9f0ad1d_0 conda-forge\n",
"jupyterlab_server 1.2.0 py_0 conda-forge\n",
"jupyterlab_widgets 1.0.0 pyhd8ed1ab_1 conda-forge\n",
"kiwisolver 1.3.1 py38h1fd1430_1 conda-forge\n",
"krb5 1.17.2 h926e7f8_0 conda-forge\n",
"lcms2 2.11 hcbb858e_1 conda-forge\n",
"ld_impl_linux-64 2.33.1 h53a641e_7 \n",
"libarchive 3.5.1 h3f442fb_1 conda-forge\n",
"libblas 3.9.0 7_openblas conda-forge\n",
"libcblas 3.9.0 7_openblas conda-forge\n",
"libclang 11.0.0 default_ha5c780c_2 conda-forge\n",
"libcurl 7.71.1 hcdd3856_8 conda-forge\n",
"libedit 3.1.20191231 h14c3975_1 \n",
"libev 4.33 h516909a_1 conda-forge\n",
"libevent 2.1.10 hcdb4288_3 conda-forge\n",
"libffi 3.3 he6710b0_2 \n",
"libgcc-ng 9.3.0 h5dbcf3e_17 conda-forge\n",
"libgfortran-ng 9.3.0 he4bcb1c_17 conda-forge\n",
"libgfortran5 9.3.0 he4bcb1c_17 conda-forge\n",
"libglib 2.66.4 hf9edacf_1 conda-forge\n",
"libgomp 9.3.0 h5dbcf3e_17 conda-forge\n",
"libiconv 1.16 h516909a_0 conda-forge\n",
"liblapack 3.9.0 7_openblas conda-forge\n",
"libllvm11 11.0.1 hf817b99_0 conda-forge\n",
"libnetcdf 4.7.4 nompi_h56d31a8_107 conda-forge\n",
"libnghttp2 1.41.0 h8cfc5f6_2 conda-forge\n",
"libopenblas 0.3.12 pthreads_h4812303_1 conda-forge\n",
"libpng 1.6.37 hed695b0_2 conda-forge\n",
"libpq 12.3 hfd2b0eb_3 conda-forge\n",
"libsodium 1.0.18 h516909a_1 conda-forge\n",
"libsolv 0.7.16 h8b12597_0 conda-forge\n",
"libssh2 1.9.0 hab1572f_5 conda-forge\n",
"libstdcxx-ng 9.3.0 h2ae2ef3_17 conda-forge\n",
"libtiff 4.2.0 hdc55705_0 conda-forge\n",
"libtool 2.4.6 h58526e2_1007 conda-forge\n",
"libuuid 2.32.1 h14c3975_1000 conda-forge\n",
"libuv 1.40.0 hd18ef5c_0 conda-forge\n",
"libwebp-base 1.1.0 h516909a_3 conda-forge\n",
"libxcb 1.14 h7b6447c_0 \n",
"libxkbcommon 1.0.3 he3ba5ed_0 conda-forge\n",
"libxml2 2.9.10 h72842e0_3 conda-forge\n",
"locket 0.2.0 py_2 conda-forge\n",
"lz4-c 1.9.3 h9c3ff4c_0 conda-forge\n",
"lzo 2.10 h516909a_1000 conda-forge\n",
"mamba 0.7.6 py38h4c9354d_0 conda-forge\n",
"markdown 3.3.3 pyh9f0ad1d_0 conda-forge\n",
"markupsafe 1.1.1 py38h497a2fe_3 conda-forge\n",
"matplotlib 3.3.3 py38h578d9bd_0 conda-forge\n",
"matplotlib-base 3.3.3 py38h5c7f4ab_0 conda-forge\n",
"mistune 0.8.4 py38h497a2fe_1003 conda-forge\n",
"monotonic 1.5 py_0 conda-forge\n",
"msgpack-python 1.0.2 py38h1fd1430_1 conda-forge\n",
"multidict 5.1.0 py38h497a2fe_1 conda-forge\n",
"mysql-common 8.0.22 ha770c72_1 conda-forge\n",
"mysql-libs 8.0.22 h1fd7589_1 conda-forge\n",
"nbclient 0.5.1 py_0 conda-forge\n",
"nbconvert 6.0.7 py38h578d9bd_3 conda-forge\n",
"nbformat 5.0.8 py_0 conda-forge\n",
"ncurses 6.2 he6710b0_1 \n",
"nest-asyncio 1.4.3 pyhd8ed1ab_0 conda-forge\n",
"netcdf4 1.5.5.1 nompi_py38h1cdf482_100 conda-forge\n",
"nodejs 15.3.0 h25f6087_0 conda-forge\n",
"notebook 6.1.6 py38h578d9bd_0 conda-forge\n",
"nspr 4.29 he1b5a44_1 conda-forge\n",
"nss 3.60 hb5efdd6_0 conda-forge\n",
"numcodecs 0.7.2 py38h709712a_1 conda-forge\n",
"numpy 1.19.5 py38h18fd61f_1 conda-forge\n",
"olefile 0.46 pyh9f0ad1d_1 conda-forge\n",
"openssl 1.1.1i h7f98852_0 conda-forge\n",
"packaging 20.8 pyhd3deb0d_0 conda-forge\n",
"pandas 1.2.0 py38h51da96c_0 conda-forge\n",
"pandoc 2.11.3.2 h7f98852_0 conda-forge\n",
"pandocfilters 1.4.3 py38h06a4308_1 \n",
"panel 0.10.2 pyhd8ed1ab_0 conda-forge\n",
"pango 1.42.4 h80147aa_5 conda-forge\n",
"param 1.10.1 pyhd3deb0d_0 conda-forge\n",
"parso 0.7.1 pyh9f0ad1d_0 conda-forge\n",
"partd 1.1.0 py_0 conda-forge\n",
"pcre 8.44 he1b5a44_0 conda-forge\n",
"perl 5.32.0 h36c2ea0_0 conda-forge\n",
"pexpect 4.8.0 py38h32f6830_1 conda-forge\n",
"pickleshare 0.7.5 py38h32f6830_1002 conda-forge\n",
"pillow 8.1.0 py38h357d4e7_1 conda-forge\n",
"pip 20.2.4 py38h06a4308_0 \n",
"pixman 0.40.0 h36c2ea0_0 conda-forge\n",
"proj 7.2.0 he47e99f_1 conda-forge\n",
"prometheus_client 0.9.0 pyhd3deb0d_0 conda-forge\n",
"prompt-toolkit 3.0.10 pyha770c72_0 conda-forge\n",
"prompt_toolkit 3.0.10 hd8ed1ab_0 conda-forge\n",
"psutil 5.8.0 py38h497a2fe_1 conda-forge\n",
"ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge\n",
"pycosat 0.6.3 py38h7b6447c_1 \n",
"pycparser 2.20 py_2 \n",
"pyct 0.4.8 py38_0 \n",
"pygments 2.7.3 pyhd8ed1ab_0 conda-forge\n",
"pyopenssl 19.1.0 pyhd3eb1b0_1 \n",
"pyparsing 2.4.7 pyh9f0ad1d_0 conda-forge\n",
"pyqt 5.12.3 py38h578d9bd_7 conda-forge\n",
"pyqt-impl 5.12.3 py38h7400c14_7 conda-forge\n",
"pyqt5-sip 4.19.18 py38h709712a_7 conda-forge\n",
"pyqtchart 5.12 py38h7400c14_7 conda-forge\n",
"pyqtwebengine 5.12.1 py38h7400c14_7 conda-forge\n",
"pyrsistent 0.17.3 py38h497a2fe_2 conda-forge\n",
"pyshp 2.1.2 pyh9f0ad1d_0 conda-forge\n",
"pysocks 1.7.1 py38h06a4308_0 \n",
"python 3.8.5 h7579374_1 \n",
"python-dateutil 2.8.1 py_0 conda-forge\n",
"python-graphviz 0.16 pyhd3deb0d_1 conda-forge\n",
"python_abi 3.8 1_cp38 conda-forge\n",
"pytz 2020.5 pyhd8ed1ab_0 conda-forge\n",
"pyviz_comms 2.0.1 pyhd3deb0d_0 conda-forge\n",
"pyyaml 5.3.1 py38h497a2fe_2 conda-forge\n",
"pyzmq 20.0.0 py38h3d7ac18_1 conda-forge\n",
"qt 5.12.9 h9d6b050_2 conda-forge\n",
"qtconsole 5.0.1 pyhd8ed1ab_0 conda-forge\n",
"qtpy 1.9.0 py_0 conda-forge\n",
"readline 8.0 h7b6447c_0 \n",
"rechunker 0.3.2 pypi_0 pypi\n",
"reproc 14.2.1 h36c2ea0_0 conda-forge\n",
"reproc-cpp 14.2.1 h58526e2_0 conda-forge\n",
"requests 2.24.0 py_0 \n",
"ruamel_yaml 0.15.87 py38h7b6447c_1 \n",
"scikit-learn 0.24.0 py38h658cfdd_0 conda-forge\n",
"scipy 1.6.0 py38hb2138dd_0 conda-forge\n",
"send2trash 1.5.0 py_0 conda-forge\n",
"setuptools 50.3.1 py38h06a4308_1 \n",
"shapely 1.7.1 py38hc7361b7_1 conda-forge\n",
"simpervisor 0.4 pyhd8ed1ab_0 conda-forge\n",
"six 1.15.0 py38h06a4308_0 \n",
"sortedcontainers 2.3.0 pyhd8ed1ab_0 conda-forge\n",
"sqlite 3.34.0 h74cdb3f_0 conda-forge\n",
"tblib 1.7.0 py_0 \n",
"terminado 0.9.2 py38h578d9bd_0 conda-forge\n",
"testpath 0.4.4 py_0 conda-forge\n",
"threadpoolctl 2.1.0 pyh5ca1d4c_0 conda-forge\n",
"tk 8.6.10 hbc83047_0 \n",
"toolz 0.11.1 py_0 conda-forge\n",
"tornado 6.1 py38h497a2fe_1 conda-forge\n",
"tqdm 4.51.0 pyhd3eb1b0_0 \n",
"traitlets 5.0.5 py_0 conda-forge\n",
"typing-extensions 3.7.4.3 0 conda-forge\n",
"typing_extensions 3.7.4.3 py_0 conda-forge\n",
"urllib3 1.25.11 py_0 \n",
"wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge\n",
"webencodings 0.5.1 py_1 conda-forge\n",
"wheel 0.35.1 pyhd3eb1b0_0 \n",
"widgetsnbextension 3.5.1 py38h578d9bd_4 conda-forge\n",
"xarray 0.16.2 pyhd8ed1ab_0 conda-forge\n",
"xoak 0.1.0 pyhd8ed1ab_0 conda-forge\n",
"xorg-kbproto 1.0.7 h14c3975_1002 conda-forge\n",
"xorg-libice 1.0.10 h516909a_0 conda-forge\n",
"xorg-libsm 1.2.3 h84519dc_1000 conda-forge\n",
"xorg-libx11 1.6.12 h516909a_0 conda-forge\n",
"xorg-libxext 1.3.4 h516909a_0 conda-forge\n",
"xorg-libxpm 3.5.13 h516909a_0 conda-forge\n",
"xorg-libxrender 0.9.10 h516909a_1002 conda-forge\n",
"xorg-libxt 1.1.5 h516909a_1003 conda-forge\n",
"xorg-renderproto 0.11.1 h14c3975_1002 conda-forge\n",
"xorg-xextproto 7.3.0 h14c3975_1002 conda-forge\n",
"xorg-xproto 7.0.31 h14c3975_1007 conda-forge\n",
"xz 5.2.5 h7b6447c_0 \n",
"yaml 0.2.5 h7b6447c_0 \n",
"yarl 1.6.3 py38h497a2fe_1 conda-forge\n",
"zarr 2.6.1 pyhd8ed1ab_0 conda-forge\n",
"zeromq 4.3.3 h58526e2_3 conda-forge\n",
"zict 2.0.0 py_0 conda-forge\n",
"zipp 3.4.0 py_0 conda-forge\n",
"zlib 1.2.11 h7b6447c_3 \n",
"zstd 1.4.8 ha95c52a_1 conda-forge\n"
]
}
],
"source": [
"!conda list"
]
}
],
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment