Skip to content

Instantly share code, notes, and snippets.

@tookser
Created April 17, 2025 20:11
Show Gist options
  • Select an option

  • Save tookser/54ca9f52c0daba19232ffacc14df1146 to your computer and use it in GitHub Desktop.

Select an option

Save tookser/54ca9f52c0daba19232ffacc14df1146 to your computer and use it in GitHub Desktop.
How to calculate singular values of random matrix and approximate it
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "c2949939-6e3f-46ac-81d4-022e9fa14c17",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from numpy import linalg"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8ebfa494-ed6f-471d-aaee-7150046d2652",
"metadata": {},
"outputs": [],
"source": [
"shape = 100 # shape of square matrix\n",
"estimate = 0.01"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "6bfa0418-83c3-4b8e-8e5e-a212f5d063da",
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(42)\n",
"m = np.random.rand(shape, shape)\n",
"# if you want normal matrix\n",
"# m = np.random.rand(shape, shape)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "0625ae9d-ee79-44f9-b2dc-bd51a188a648",
"metadata": {},
"outputs": [],
"source": [
"s, v, d = np.linalg.svd(m)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "2ed69cbd-6b30-4584-a60f-31eb15530f7b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fdcc80c6e80>]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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0z+QyenkcE5DlarK2UXmSlLjOy7q0vDwMWfOHPl8vvOqHAMDA+dVQyRp06ZN2rBhQ+37dDqtjo6ORg8LAAAr+H1ezYuFNC82/dlEM6Xh84ACgYCWLl2q3t7eCed7e3u1YsWK864PBoOKxWITDgAAcPmakccuGzZs0J133qlly5bp+uuv1xNPPKGjR4/qrrvumokfBwAALiEzEj6+8IUv6NSpU/rmN7+pEydOaMmSJfrRj36kRYsWzcSPAwAAl5AZWedjOljnAwCAS089f79Z+xUAADiK8AEAABxF+AAAAI4ifAAAAEcRPgAAgKMIHwAAwFGEDwAA4CjCBwAAcBThAwAAOGpGllefjuqCq+l02uWRAACAyar+3Z7MwukXXfjIZDKSpI6ODpdHAgAA6pXJZBSPx9/3motub5dSqaTjx48rGo3K4/E09LPT6bQ6OjrU19fHvjEzjHvtHO61c7jXzuFeO6dR99oYo0wmo/b2dnm979/VcdFVPrxerxYsWDCjPyMWi/GP2SHca+dwr53DvXYO99o5jbjXH1TxqKLhFAAAOIrwAQAAHGVV+AgGg/r617+uYDDo9lAue9xr53CvncO9dg732jlu3OuLruEUAABc3qyqfAAAAPcRPgAAgKMIHwAAwFGEDwAA4Chrwsdjjz2mzs5OhUIhLV26VP/93//t9pAueT09PfrkJz+paDSqefPm6dZbb9Xrr78+4RpjjLq7u9Xe3q5wOKxVq1bp0KFDLo348tHT0yOPx6P169fXznGvG+fYsWP60pe+pLa2NkUiEX3sYx/T/v37a69zrxunUCjor/7qr9TZ2alwOKzFixfrm9/8pkqlUu0a7vfUPP/887rlllvU3t4uj8ej73//+xNen8x9zeVyuu+++zRnzhw1NzfrD//wD/X2229Pf3DGArt27TJNTU3mySefNK+99pq5//77TXNzszly5IjbQ7uk/f7v/7556qmnzKuvvmoOHDhgbr75ZrNw4UIzPDxcu+aRRx4x0WjUfPe73zUHDx40X/jCF8z8+fNNOp12ceSXthdffNF86EMfMtddd525//77a+e5141x+vRps2jRIvOVr3zF/M///I85fPiw+fGPf2x+/etf167hXjfOt771LdPW1mZ++MMfmsOHD5t//dd/NS0tLWbbtm21a7jfU/OjH/3IbN682Xz3u981ksz3vve9Ca9P5r7edddd5oorrjC9vb3m5ZdfNp/5zGfMRz/6UVMoFKY1NivCx+/8zu+Yu+66a8K5q666yjz44IMujejyNDAwYCSZPXv2GGOMKZVKJplMmkceeaR2zdjYmInH4+bv//7v3RrmJS2TyZiuri7T29trVq5cWQsf3OvGeeCBB8wNN9zwnq9zrxvr5ptvNn/6p3864dzatWvNl770JWMM97tR3h0+JnNfz5w5Y5qamsyuXbtq1xw7dsx4vV7z3HPPTWs8l/1jl3w+r/3792vNmjUTzq9Zs0Z79+51aVSXp1QqJUlqbW2VJB0+fFj9/f0T7n0wGNTKlSu591N0zz336Oabb9aNN9444Tz3unGeffZZLVu2TH/yJ3+iefPm6eMf/7iefPLJ2uvc68a64YYb9F//9V964403JEm/+MUv9POf/1yf//znJXG/Z8pk7uv+/fs1Pj4+4Zr29nYtWbJk2vf+ottYrtEGBwdVLBaVSCQmnE8kEurv73dpVJcfY4w2bNigG264QUuWLJGk2v290L0/cuSI42O81O3atUsvv/yy9u3bd95r3OvG+c1vfqPHH39cGzZs0EMPPaQXX3xRf/Znf6ZgMKgvf/nL3OsGe+CBB5RKpXTVVVfJ5/OpWCzq4Ycf1m233SaJf9szZTL3tb+/X4FAQLNnzz7vmun+/bzsw0eVx+OZ8L0x5rxzmLp7771Xv/zlL/Xzn//8vNe499PX19en+++/X7t371YoFHrP67jX01cqlbRs2TJt2bJFkvTxj39chw4d0uOPP64vf/nLteu4143xne98R08//bR27typa665RgcOHND69evV3t6udevW1a7jfs+MqdzXRtz7y/6xy5w5c+Tz+c5LaQMDA+clPkzNfffdp2effVY//elPtWDBgtr5ZDIpSdz7Bti/f78GBga0dOlS+f1++f1+7dmzR3/7t38rv99fu5/c6+mbP3++rr766gnnPvKRj+jo0aOS+HfdaH/5l3+pBx98UF/84hd17bXX6s4779Sf//mfq6enRxL3e6ZM5r4mk0nl83kNDQ295zVTddmHj0AgoKVLl6q3t3fC+d7eXq1YscKlUV0ejDG699579cwzz+gnP/mJOjs7J7ze2dmpZDI54d7n83nt2bOHe1+nz33uczp48KAOHDhQO5YtW6Y77rhDBw4c0OLFi7nXDfKpT33qvCnjb7zxhhYtWiSJf9eNls1m5fVO/FPk8/lqU2253zNjMvd16dKlampqmnDNiRMn9Oqrr07/3k+rXfUSUZ1q+4//+I/mtddeM+vXrzfNzc3mrbfecntol7Svfe1rJh6Pm5/97GfmxIkTtSObzdaueeSRR0w8HjfPPPOMOXjwoLntttuYItcg5852MYZ73Sgvvvii8fv95uGHHzZvvvmm+ed//mcTiUTM008/XbuGe90469atM1dccUVtqu0zzzxj5syZYzZu3Fi7hvs9NZlMxrzyyivmlVdeMZLM1q1bzSuvvFJbZmIy9/Wuu+4yCxYsMD/+8Y/Nyy+/bD772c8y1bYef/d3f2cWLVpkAoGA+cQnPlGbDoqpk3TB46mnnqpdUyqVzNe//nWTTCZNMBg0n/70p83BgwfdG/Rl5N3hg3vdOD/4wQ/MkiVLTDAYNFdddZV54oknJrzOvW6cdDpt7r//frNw4UITCoXM4sWLzebNm00ul6tdw/2emp/+9KcX/P/odevWGWMmd19HR0fNvffea1pbW004HDZ/8Ad/YI4ePTrtsXmMMWZ6tRMAAIDJu+x7PgAAwMWF8AEAABxF+AAAAI4ifAAAAEcRPgAAgKMIHwAAwFGEDwAA4CjCBwAAcBThAwAAOIrwAQAAHEX4AAAAjiJ8AAAAR/0/T8yparOxHC4AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(v) # singular values"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "fc4a47db-34fe-48e1-90a7-1aa270eb9e62",
"metadata": {},
"outputs": [],
"source": [
"frobenius = []\n",
"for i in range(1,100+1):\n",
" # v_prob = np.array(list(v[:i]) + [0]*(100-i))\n",
" # df = (s*v_prob@d - m)\n",
" \n",
" ## also you can write (2 lines changed)\n",
" v_prob = np.diag(list(v[:i]) + [0]*(100-i))\n",
" df = (s@v_prob@d - m)\n",
" df = df*df\n",
" df = df.sum()\n",
" frobenius.append(df)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "3b21dad6-33a1-497d-aac2-5464cfcb1b48",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"9.028249113009955e-27"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(frobenius)\n",
"frobenius[-1] # control"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "649b3292-7e2f-4403-9dd5-4bc7f99863f0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"98 singular values is enough to estimate random matrix (U~[0,1]) of size 100x100 (0.01 Frobenius norm))\n"
]
}
],
"source": [
"print(f'{list(map(lambda x: x < estimate, frobenius)).index(True) + 1} singular values is enough to estimate random matrix (U~[0,1]) of size {shape}x{shape} ({estimate} Frobenius norm))')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment