From 016dcf665490f4611f75904c260cf703ef3b1316 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20Gel=C3=9F?=
<38036185+PGelss@users.noreply.github.com>
Date: Sun, 2 Jun 2024 23:05:13 +0200
Subject: [PATCH] Delete Exercises/Session 1 - Tensor Basics (with
solutions).ipynb
---
...n 1 - Tensor Basics (with solutions).ipynb | 368 ------------------
1 file changed, 368 deletions(-)
delete mode 100644 Exercises/Session 1 - Tensor Basics (with solutions).ipynb
diff --git a/Exercises/Session 1 - Tensor Basics (with solutions).ipynb b/Exercises/Session 1 - Tensor Basics (with solutions).ipynb
deleted file mode 100644
index 3222ddd..0000000
--- a/Exercises/Session 1 - Tensor Basics (with solutions).ipynb
+++ /dev/null
@@ -1,368 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "e4f44eb7",
- "metadata": {},
- "source": [
- "$\\def\\tcoreleft{\\underset{\\tiny\\mid}{\\textcolor{MidnightBlue}{⦸}}}$\n",
- "$\\def\\tcorecenter{\\underset{\\tiny\\mid}{\\textcolor{RedOrange}{⦿}}}$\n",
- "$\\def\\tcoreright{\\underset{\\tiny\\mid}{\\textcolor{MidnightBlue}{\\oslash}}}$\n",
- "
TMQS Workshop 2024 @ Zuse Institute Berlin
\n",
- "Summer School on Tensor Methods for Quantum Simulation
\n",
- "June 3 - 5, 2024
\n",
- "$\\tcoreleft - \\tcoreleft - \\tcoreleft - \\cdots - \\tcorecenter - \\cdots - \\tcoreright - \\tcoreright$
\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "58a30939-f570-45cd-a736-d6f21aeb2a0c",
- "metadata": {},
- "source": [
- "***"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "6c3441f3-b5a9-42c4-ba21-2bc682b0d8ac",
- "metadata": {},
- "source": [
- "## **Session 1 - Tensor Basics**"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "6f6cc702",
- "metadata": {},
- "source": [
- "***"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "id": "c8096861-c33f-49b8-9bda-62529ce31bc3",
- "metadata": {},
- "source": [
- "## Exercise 1.1\n",
- "\n",
- "... a bit of theory to begin with.\n",
- "\n",
- "The following exercises are intended to demonstrate to you that one can handle tensors in a very natural way, much like with classical vectors and matrices. In the end, standard linear algebra provides the foundational understanding necessary to grasp the concepts of tensors effectively. By extending basic concepts, tensors offer a powerful framework for describing and manipulating multidimensional data in various fields such as physics, engineering, and machine learning.\n",
- "\n",
- "Suppose $T$ and $U$ are tensors in $\\mathbb{C}^{N}$, where $N = (n_1, \\dots , n_d)$ and $d \\in \\mathbb{N}$. Furthermore, let $G, H \\in \\mathbb{C}^{N \\times N}$. Show that\n",
- "\n",
- "**a)**$\\quad T^\\dagger \\cdot U = \\langle \\text{vec}(T), \\text{vec}(U) \\rangle$\n",
- "\n",
- "**b)**$\\quad \\lVert T \\rVert_F = \\lVert \\text{vec}(T) \\rVert_2$\n",
- "\n",
- "**c)**$\\quad \\text{tr}(G^\\dagger \\cdot H) = \\langle \\text{vec}(G), \\text{vec}(H) \\rangle$"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "bc6abad4-3b47-447c-9e87-86b44381164b",
- "metadata": {},
- "source": [
- "***"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "11976a26-d5e7-4ca5-b02b-ce4709527c8c",
- "metadata": {},
- "source": [
- "$\\textcolor{red}{\\textbf{SOLUTION:}}$"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "742e700e-8485-4923-870b-d34994d2978b",
- "metadata": {},
- "source": [
- "**a)**$\\quad$$T^\\dagger \\cdot U = \\sum_{i_1 = 1}^{n_1} \\cdot \\sum_{i_d = 1}^{n_d} \\overline{T}_{i_1, \\dots, i_d} \\cdot U_{i_1, \\dots, i_d} = \\sum_{i=1}^{n_1 \\cdot \\ldots \\cdot n_d} \\overline{\\text{vec}(T)_i} \\cdot \\text{vec}(U)_i = \\langle \\text{vec}(T), \\text{vec}(U) \\rangle$\n",
- "\n",
- "**b)**$\\quad$$\\lVert T \\rVert_F^2 = \\sum_{i_1 = 1}^{n_1} \\cdots \\sum_{i_d = 1}^{n_d} |T_{i_1, \\dots, i_d}|^2 = \\sum_{i=1}^{n_1 \\cdot \\ldots \\cdot n_d} |\\text{vec}(T)_i|^2 = \\lVert \\text{vec}(T) \\rVert_2^2$\n",
- "\n",
- "**c)**$\\quad$$\\text{tr}(G^\\dagger \\cdot H) = \\sum_{i_1=1}^{n_1} \\cdots \\sum_{i_d=1}^{n_d} \\sum_{j_1=1}^{n_1} \\cdots \\sum_{j_d=1}^{n_d} G^\\dagger_{i_1, \\dots, i_d, j_1 , \\dots, j_d} \\cdot H_{j_1, \\dots, j_d, i_1, \\dots, i_d} = \\sum_{i=1}^{n_1^2 \\cdot \\ldots \\cdot n_d^2} \\overline{\\text{vec}(G)_i} \\cdot \\text{vec}(H)_i = \\langle \\text{vec}(G), \\text{vec}(H) \\rangle$"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "57638421-d883-4f7f-ab0f-aae0505cffca",
- "metadata": {},
- "source": [
- "***"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "id": "41a28d39-ecbe-4a8b-9ed0-161d36c14c73",
- "metadata": {},
- "source": [
- "## Exercise 1.2 \n",
- "\n",
- "... now onto the basic implementation\n",
- "\n",
- "We turn to the practical implementation of tensors and their limitations. Tensors in full format can be easily created and multiplied/contracted in Python using the standard package NumPy:\n",
- "\n",
- "> import numpy as np\n",
- "\n",
- "In addition, we also need the Matplotlib and time package for this task:\n",
- "\n",
- "> import matplotlib.pyplot as plt\n",
- "> \n",
- "> import time\n",
- "\n",
- "Create random order-$d$ tensors in $\\mathbb{R}^{N \\times N}$ with $N=(2,\\dots,2)$ for different dimensions $d = 1, 2, \\dots, 10$:\n",
- "\n",
- "> T = np.random.random_sample(2*d*[2])\n",
- "\n",
- "Compute the storage (```T.size * T.itemsize```) of every instance and plot the results:\n",
- "\n",
- "> plt.plot(np.arange(1,11), storage)\n",
- "\n",
- "Rerun the expriment and reshape every instance into an array in $\\mathbb{R}^{2^d \\times 2^d}$ and compute an SVD:\n",
- "\n",
- "> T_mat = T.reshape([2** d, 2**d])\n",
- ">\n",
- "> U, S, Vt = np.linalg.svd(T)\n",
- "\n",
- "Measure the CPU time using:\n",
- "\n",
- "> start_time = time.time()\n",
- ">\n",
- "> ...\n",
- ">\n",
- "> end_time = time.time() - start_time\n",
- "\n",
- "Plot the results and interpret both plots in terms of storage consumption and computational complexity, respectively. Given a matrix $M \\in \\mathbb{R}^{m \\times n}$, $m \\geq n$, the overall cost for computing an SVD is $O(m n^2)$."
- ]
- },
- {
- "cell_type": "markdown",
- "id": "83e132fb-95b5-43a8-98ca-0ed7c397767d",
- "metadata": {},
- "source": [
- "***"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "1cb59312-1033-4dd0-886c-7a034eae661b",
- "metadata": {},
- "source": [
- "$\\textcolor{red}{\\textbf{SOLUTION:}}$"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "id": "f5ca5182-ecb4-4b2b-815b-4b7c44af9920",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[]"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAHHCAYAAACRAnNyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9wklEQVR4nO3deXhTZf7+8Tvd0tINCl0tlEWwUnYQv4oKCooM4KAjLoNaFZ0ZRRFBZmD4uTCKKI4MIypuCDiIu6ijI4sIKK4sLhSUXS1LW6DQlW7J+f1REhpaoIGWc5K8X9eVi+ack+TTppq7z/M5z7EZhmEIAADAgoLMLgAAAOBYCCoAAMCyCCoAAMCyCCoAAMCyCCoAAMCyCCoAAMCyCCoAAMCyCCoAAMCyCCoAAMCyCCoAYFH9+vVTv379zC4DMBVBBTgNFixYoBkzZphdBixo48aNeuihh/TLL7+YXQpgSTau9QM0viFDhigrK4sPI9Ty9ttva/jw4Vq+fHmt0ZOKigpJUlhYmAmVAdYQYnYBAE5OVVWVnE4nH2J+jPcWYOoHOGVFRUUaM2aMWrduLbvdroSEBF166aVat26dpOo+g48++ki//vqrbDabbDabWrdu7X58Xl6eRo4cqcTERIWHh6tr166aN2+ex2v88ssvstls+uc//6kZM2aoXbt2stvt2rhxoyoqKvTAAw+oZ8+eio2NVWRkpC688EItX768Vq379+/XjTfeqJiYGDVt2lSZmZn64YcfZLPZNHfuXI9jf/75Z1199dWKi4tTeHi4evXqpQ8++KBePxOn06l///vf6ty5s8LDwxUfH6/LL79ca9ascR9TVVWlhx9+2P29tG7dWn//+99VXl7u8VytW7fWkCFDtGrVKvXu3Vvh4eFq27atXnnlFY/jKisrNXnyZLVv317h4eFq3ry5LrjgAi1dutR9zLF6Pm6++WaP96Tmz/uZZ55R27Zt1aRJE1122WXKzs6WYRh6+OGHlZqaqoiICP3+979Xfn5+nXUvWbJE3bp1U3h4uDp27Kh3333XfczcuXM1fPhwSdLFF1/s/v1YsWLFMev19vflhRdecP+MzznnHK1evbruNw2wKEZUgFP0l7/8RW+//bbuuusudezYUfv379eqVav0008/qUePHpo0aZIKCgq0c+dO/etf/5IkRUVFSZIOHTqkfv36aevWrbrrrrvUpk0bvfXWW7r55pt18OBB3XPPPR6vNWfOHJWVlelPf/qT7Ha74uLiVFhYqJdeeknXX3+9br/9dhUVFWn27NkaOHCgvv32W3Xr1k1SdXgYOnSovv32W91xxx1KT0/X+++/r8zMzFrf04YNG9SnTx+dccYZmjBhgiIjI/Xmm29q2LBheuedd3TllVce92cycuRIzZ07V4MGDdJtt92mqqoqff755/r666/Vq1cvSdJtt92mefPm6eqrr9a4ceP0zTffaOrUqfrpp5+0cOFCj+fbunWrrr76ao0cOVKZmZl6+eWXdfPNN6tnz57KyMiQJD300EOaOnWqbrvtNvXu3VuFhYVas2aN1q1bp0svvdT7N1bSq6++qoqKCt19993Kz8/XtGnTdM011+iSSy7RihUr9Le//U1bt27VzJkzdd999+nll1/2ePyWLVt07bXX6i9/+YsyMzM1Z84cDR8+XIsWLdKll16qiy66SKNHj9ZTTz2lv//97zr77LMlyf3v0bz9fVmwYIGKior05z//WTabTdOmTdNVV12l7du3KzQ09KR+JsBpZwA4JbGxscaoUaOOe8zgwYONtLS0WttnzJhhSDLmz5/v3lZRUWGcd955RlRUlFFYWGgYhmHs2LHDkGTExMQYeXl5Hs9RVVVllJeXe2w7cOCAkZiYaNx6663ube+8844hyZgxY4Z7m8PhMC655BJDkjFnzhz39v79+xudO3c2ysrK3NucTqdx/vnnG+3btz/u9/rpp58akozRo0fX2ud0Og3DMIzvv//ekGTcdtttHvvvu+8+Q5Lx6aefurelpaUZkozPPvvMvS0vL8+w2+3GuHHj3Nu6du1qDB48+Li19e3b1+jbt2+t7ZmZmR7vj+vnHR8fbxw8eNC9feLEiYYko2vXrkZlZaV7+/XXX2+EhYV5/Lxcdb/zzjvubQUFBUZycrLRvXt397a33nrLkGQsX778hPV6+/vSvHlzIz8/333s+++/b0gy/vvf/x735wRYCVM/wClq2rSpvvnmG+3evdvrx/7vf/9TUlKSrr/+eve20NBQjR49WsXFxVq5cqXH8X/4wx8UHx/vsS04ONjdy+B0OpWfn6+qqir16tXLPf0kSYsWLVJoaKhuv/1297agoCCNGjXK4/ny8/P16aef6pprrlFRUZH27dunffv2af/+/Ro4cKC2bNmiXbt2HfN7euedd2Sz2fTggw/W2mez2dzftySNHTvWY/+4ceMkSR999JHH9o4dO+rCCy9034+Pj9dZZ52l7du3u7c1bdpUGzZs0JYtW45Zm7eGDx+u2NhY9/1zzz1XknTDDTcoJCTEY3tFRUWtn0tKSorH6FNMTIxuuukmfffdd8rJyfG6Hm9/X6699lo1a9bMfd/1M6z5cwOsjqACnKJp06YpKytLLVu2VO/evfXQQw/V+4Pg119/Vfv27RUU5Pmfomvo/9dff/XY3qZNmzqfZ968eerSpYu7NyM+Pl4fffSRCgoKPF4rOTlZTZo08XjsmWee6XF/69atMgxD999/v+Lj4z1urvCRl5d3zO9p27ZtSklJUVxc3HG/76CgoFqvnZSUpKZNm9b6vlu1alXrOZo1a6YDBw647//jH//QwYMH1aFDB3Xu3Fnjx4/Xjz/+eMwa6uPo13WFlpYtW9a5vWY9UvXP1hXOXDp06CBJJ3UGmLe/L0fX7wotR9cJWBlBBThF11xzjbZv366ZM2cqJSVFTzzxhDIyMvTxxx83+GtFRETU2jZ//nzdfPPNateunWbPnq1FixZp6dKluuSSS+R0Or1+Dddj7rvvPi1durTO29EB42Qd/SF+LMHBwXVuN2qsrnDRRRdp27Ztevnll9WpUye99NJL6tGjh1566aUTvp7D4fDqdetTjxX4Sp3A8dBMCzSA5ORk3XnnnbrzzjuVl5enHj16aMqUKRo0aJCkY39ApqWl6ccff5TT6fT4K/nnn3927z+Rt99+W23bttW7777r8TpHT72kpaVp+fLlKi0t9RhV2bp1q8dxbdu2lVQ9pTBgwIATvv7R2rVrp8WLFys/P/+YoyppaWlyOp3asmWLR+Nobm6uDh48WK/vuy5xcXG65ZZbdMstt6i4uFgXXXSRHnroId12222SqkcU6hrtOnokoqG4Rqdqvi+bN2+WJPdZRvUNa1LD/L4AvoYRFeAUOBwOj+kVSUpISFBKSorHabaRkZG1jpOk3/3ud8rJydEbb7zh3lZVVaWZM2cqKipKffv2PWENrr+aa/6V/M033+irr77yOG7gwIGqrKzUiy++6N7mdDr1zDPP1Kq/X79+ev7557Vnz55ar7d3797j1vOHP/xBhmFo8uTJtfa5avzd734nSbVW650+fbokafDgwcd9jbrs37/f435UVJTOPPNMj/ehXbt2+vnnnz2+hx9++EFffPGF169XH7t37/Y4g6mwsFCvvPKKunXrpqSkJEnVvxuSdPDgwRM+X0P8vgC+hhEV4BQUFRUpNTVVV199tbp27aqoqCh98sknWr16tZ588kn3cT179tQbb7yhsWPH6pxzzlFUVJSGDh2qP/3pT3r++ed18803a+3atWrdurXefvttffHFF5oxY4aio6NPWMOQIUP07rvv6sorr9TgwYO1Y8cOPffcc+rYsaOKi4vdxw0bNky9e/fWuHHjtHXrVqWnp+uDDz5wr/9R8y/7Z555RhdccIE6d+6s22+/XW3btlVubq6++uor7dy5Uz/88MMx67n44ot144036qmnntKWLVt0+eWXy+l06vPPP9fFF1+su+66S127dlVmZqZeeOEFHTx4UH379tW3336refPmadiwYbr44ou9fi86duyofv36qWfPnoqLi9OaNWvcp4273HrrrZo+fboGDhyokSNHKi8vT88995wyMjJUWFjo9WueSIcOHTRy5EitXr1aiYmJevnll5Wbm6s5c+a4j+nWrZuCg4P1+OOPq6CgQHa7XZdccokSEhJqPV9D/L4APse8E44A31deXm6MHz/e6Nq1qxEdHW1ERkYaXbt2NZ599lmP44qLi40//vGPRtOmTQ1JHqfC5ubmGrfccovRokULIywszOjcubPHqcKGceR00yeeeKJWDU6n03j00UeNtLQ0w263G927dzc+/PDDWqfcGoZh7N271/jjH/9oREdHG7GxscbNN99sfPHFF4Yk4/XXX/c4dtu2bcZNN91kJCUlGaGhocYZZ5xhDBkyxHj77bdP+HOpqqoynnjiCSM9Pd0ICwsz4uPjjUGDBhlr1651H1NZWWlMnjzZaNOmjREaGmq0bNnSmDhxoscpvoZRfZpvXacdH33q7iOPPGL07t3baNq0qREREWGkp6cbU6ZMMSoqKjweN3/+fKNt27ZGWFiY0a1bN2Px4sXHPD356J/38uXLDUnGW2+95bF9zpw5hiRj9erVtepevHix0aVLF8Nutxvp6em1HmsYhvHiiy8abdu2NYKDgz1OVa7rdOpT/X2RZDz44IO1tgNWxbV+gAD33nvv6corr9SqVavUp08fs8vxG61bt1anTp304Ycfml0K4NPoUQECyKFDhzzuOxwOzZw5UzExMerRo4dJVQHAsdGj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TlZERIQGDBigLVu2nLb6CCp+aOXKlRo1apS+/vprLV26VJWVlbrssstUUlJidmkBb/Xq1Xr++efVpUsXs0sJaAcOHFCfPn0UGhqqjz/+WBs3btSTTz6pZs2amV1aQHr88cc1a9YsPf300/rpp5/0+OOPa9q0aZo5c6bZpQWEkpISde3aVc8880yd+6dNm6annnpKzz33nL755htFRkZq4MCBKisrOy31cXpyANi7d68SEhK0cuVKXXTRRWaXE7CKi4vVo0cPPfvss3rkkUfUrVs3zZgxw+yyAtKECRP0xRdf6PPPPze7FEgaMmSIEhMTNXv2bPe2P/zhD4qIiND8+fNNrCzw2Gw2LVy4UMOGDZNUPZqSkpKicePG6b777pMkFRQUKDExUXPnztV1113X6DUxohIACgoKJElxcXEmVxLYRo0apcGDB2vAgAFmlxLwPvjgA/Xq1UvDhw9XQkKCunfvrhdffNHssgLW+eefr2XLlmnz5s2SpB9++EGrVq3SoEGDTK4MO3bsUE5Ojsf/t2JjY3Xuuefqq6++Oi01+PRFCXFiTqdTY8aMUZ8+fdSpUyezywlYr7/+utatW6fVq1ebXQokbd++XbNmzdLYsWP197//XatXr9bo0aMVFhamzMxMs8sLOBMmTFBhYaHS09MVHBwsh8OhKVOmaMSIEWaXFvBycnIkSYmJiR7bExMT3fsaG0HFz40aNUpZWVlatWqV2aUErOzsbN1zzz1aunSpwsPDzS4Hqg7wvXr10qOPPipJ6t69u7KysvTcc88RVEzw5ptv6tVXX9WCBQuUkZGh77//XmPGjFFKSgrvB5j68Wd33XWXPvzwQy1fvlypqalmlxOw1q5dq7y8PPXo0UMhISEKCQnRypUr9dRTTykkJEQOh8PsEgNOcnKyOnbs6LHt7LPP1m+//WZSRYFt/PjxmjBhgq677jp17txZN954o+69915NnTrV7NICXlJSkiQpNzfXY3tubq57X2MjqPghwzB01113aeHChfr000/Vpk0bs0sKaP3799f69ev1/fffu2+9evXSiBEj9P333ys4ONjsEgNOnz59ap2yv3nzZqWlpZlUUWArLS1VUJDnx1FwcLCcTqdJFcGlTZs2SkpK0rJly9zbCgsL9c033+i88847LTUw9eOHRo0apQULFuj9999XdHS0ex4xNjZWERERJlcXeKKjo2v1B0VGRqp58+b0DZnk3nvv1fnnn69HH31U11xzjb799lu98MILeuGFF8wuLSANHTpUU6ZMUatWrZSRkaHvvvtO06dP16233mp2aQGhuLhYW7dudd/fsWOHvv/+e8XFxalVq1YaM2aMHnnkEbVv315t2rTR/fffr5SUFPeZQY3OgN+RVOdtzpw5ZpeGw/r27Wvcc889ZpcR0P773/8anTp1Mux2u5Genm688MILZpcUsAoLC4177rnHaNWqlREeHm60bdvWmDRpklFeXm52aQFh+fLldX5mZGZmGoZhGE6n07j//vuNxMREw263G/379zc2bdp02upjHRUAAGBZ9KgAAADLIqgAAADLIqgAAADLIqgAAADLIqgAAADLIqgAAADLIqgAAADLIqgAsLx+/fppzJgxZpcBwAQEFQAAYFkEFQAAYFkEFQCWUlJSoptuuklRUVFKTk7Wk08+aXZJAExEUAFgKePHj9fKlSv1/vvva8mSJVqxYoXWrVtndlkATBJidgEA4FJcXKzZs2dr/vz56t+/vyRp3rx5Sk1NNbkyAGZhRAWAZWzbtk0VFRU699xz3dvi4uJ01llnmVgVADMRVAAAgGURVABYRrt27RQaGqpvvvnGve3AgQPavHmziVUBMBM9KgAsIyoqSiNHjtT48ePVvHlzJSQkaNKkSQoK4m8qIFARVABYyhNPPKHi4mINHTpU0dHRGjdunAoKCswuC4BJbIZhGGYXAQAAUBfGUwEAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGURVAAAgGX9f9v4snQNRnpkAAAAAElFTkSuQmCC",
- "text/plain": [
- "