test
This commit is contained in:
parent
85ba70d8b3
commit
bddd173633
165
jupyter.ipynb
165
jupyter.ipynb
@ -2,7 +2,7 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"execution_count": 163,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"is_executing": true,
|
||||
@ -14,7 +14,7 @@
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"/var/folders/tq/jq5nwbnj7v10tls99x99qbh40000gn/T/ipykernel_57719/1134982733.py:12: DeprecationWarning: Importing display from IPython.core.display is deprecated since IPython 7.14, please import from IPython display\n",
|
||||
"/var/folders/tq/jq5nwbnj7v10tls99x99qbh40000gn/T/ipykernel_61525/3026179557.py:15: DeprecationWarning: Importing display from IPython.core.display is deprecated since IPython 7.14, please import from IPython display\n",
|
||||
" from IPython.core.display import display, HTML\n"
|
||||
]
|
||||
},
|
||||
@ -41,6 +41,9 @@
|
||||
"import scipy.linalg as la\n",
|
||||
"from PIL import Image\n",
|
||||
"from ipywidgets import interact\n",
|
||||
"from numpy.linalg import eig\n",
|
||||
"from math import isclose\n",
|
||||
"import pprint\n",
|
||||
"\n",
|
||||
"# zmień szerokość komórki\n",
|
||||
"from IPython.core.display import display, HTML\n",
|
||||
@ -49,7 +52,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 164,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
@ -115,7 +118,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 284,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
@ -124,7 +127,7 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"gray_images = {\n",
|
||||
" \"cat\":rgb2gray(img_as_float(data.chelsea())),\n",
|
||||
" \"cat\":rgb2gray(img_as_float(data.chelsea()))/255.0,\n",
|
||||
" \"astro\":rgb2gray(img_as_float(data.astronaut())),\n",
|
||||
" \"camera\":data.camera(),\n",
|
||||
" \"coin\": data.coins(),\n",
|
||||
@ -158,51 +161,113 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 304,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "IndexError",
|
||||
"evalue": "index 3 is out of bounds for axis 0 with size 3",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
|
||||
"Input \u001b[0;32mIn [304]\u001b[0m, in \u001b[0;36m<cell line: 77>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 75\u001b[0m U,s,V \u001b[38;5;241m=\u001b[39m calculate(np\u001b[38;5;241m.\u001b[39mtranspose(a))\n\u001b[1;32m 76\u001b[0m U1,s1,V1 \u001b[38;5;241m=\u001b[39m svd(a)\n\u001b[0;32m---> 77\u001b[0m U \u001b[38;5;241m=\u001b[39m \u001b[43mcheck_sign_U\u001b[49m\u001b[43m(\u001b[49m\u001b[43mU\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mU1\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 78\u001b[0m V \u001b[38;5;241m=\u001b[39m check_sign_V(V, V1)\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28mprint\u001b[39m(V\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m])\n",
|
||||
"Input \u001b[0;32mIn [304]\u001b[0m, in \u001b[0;36mcheck_sign_U\u001b[0;34m(U, builtin)\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m0\u001b[39m,builtin\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]):\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m j \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m0\u001b[39m,builtin\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m]):\n\u001b[0;32m---> 63\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m builtin[j][i] \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m0.0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[43mU\u001b[49m\u001b[43m[\u001b[49m\u001b[43mj\u001b[49m\u001b[43m]\u001b[49m[i] \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0.0\u001b[39m:\n\u001b[1;32m 64\u001b[0m U[j][i] \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 65\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m builtin[j][i] \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0.0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m U[j][i] \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m0.0\u001b[39m:\n",
|
||||
"\u001b[0;31mIndexError\u001b[0m: index 3 is out of bounds for axis 0 with size 3"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def calculate(A):\n",
|
||||
" m = A.shape[0]\n",
|
||||
" n = A.shape[1]\n",
|
||||
" n = A.shape[0]\n",
|
||||
" m = A.shape[1]\n",
|
||||
" S = np.zeros(n)\n",
|
||||
"\n",
|
||||
" # finding eigenvectors with biggest eigenvalues of A*transpose(A)\n",
|
||||
" helper = np.matmul(A, np.transpose(A))\n",
|
||||
" eigenvalues, eigenvectors = la.eigh(helper)\n",
|
||||
"# print(f'helper ---------- {helper}')\n",
|
||||
" eigenvalues, eigenvectors = eig(helper)\n",
|
||||
"# print(eigenvalues)\n",
|
||||
"# print(eigenvectors)\n",
|
||||
" # descending sort of all the eigenvectors according to their eigenvalues\n",
|
||||
" index = eigenvalues.argsort()[::-1]\n",
|
||||
" eigenvalues = np.real(eigenvalues)\n",
|
||||
" eigenvectors = np.real(eigenvectors)\n",
|
||||
" eigenvalues = eigenvalues[index]\n",
|
||||
" eigenvectors = eigenvectors[:, index]\n",
|
||||
" U = eigenvectors\n",
|
||||
"\n",
|
||||
" # same finding process for transpose(A)*A\n",
|
||||
" helper2 = np.matmul(np.transpose(A), A)\n",
|
||||
" eigenvalues2, eigenvectors2 = eig(helper2)\n",
|
||||
" # descending sort of all the eigenvectors according to their eigenvalues\n",
|
||||
" index2 = eigenvalues2.argsort()[::-1]\n",
|
||||
"# print(f'e2 ----------------- {np.real(eigenvalues2)}')\n",
|
||||
" eigenvalues2 = np.real(eigenvalues2)\n",
|
||||
" eigenvectors2 = np.real(eigenvectors2)\n",
|
||||
" eigenvalues2 = eigenvalues2[index2]\n",
|
||||
" eigenvectors2 = eigenvectors2[:, index2]\n",
|
||||
"# print(eigenvalues2)\n",
|
||||
"# print(eigenvectors2)\n",
|
||||
" V = np.transpose(eigenvectors2)\n",
|
||||
" \n",
|
||||
" # S is a diagonal matrix that keeps square root of eigenvalues\n",
|
||||
" j = 0\n",
|
||||
" for i in eigenvalues:\n",
|
||||
" for i in eigenvalues2:\n",
|
||||
" if j == S.size:\n",
|
||||
" break\n",
|
||||
" elif i >= 0:\n",
|
||||
" S[j] = np.sqrt(i)\n",
|
||||
" j += 1\n",
|
||||
" # same finding process for transpose(A)*A\n",
|
||||
" helper = np.matmul(np.transpose(A), A)\n",
|
||||
" eigenvalues, eigenvectors = la.eigh(helper)\n",
|
||||
" # descending sort of all the eigenvectors according to their eigenvalues\n",
|
||||
" index = eigenvalues.argsort()[::-1]\n",
|
||||
" eigenvalues = eigenvalues[index]\n",
|
||||
" eigenvectors = eigenvectors[:, index]\n",
|
||||
" V = np.transpose(eigenvectors)\n",
|
||||
"\n",
|
||||
" # sorting S in descending order\n",
|
||||
" S[::-1].sort()\n",
|
||||
" # print_to_file(S)\n",
|
||||
"\n",
|
||||
" return U, S, V"
|
||||
" return U, S, V\n",
|
||||
"\n",
|
||||
"def check_sign_V(V, builtin):\n",
|
||||
" for i in range(0,builtin.shape[0]):\n",
|
||||
" for j in range(0,builtin.shape[1]):\n",
|
||||
" if builtin[j][i] < 0.0 and V[j][i] > 0.0:\n",
|
||||
" V[j][i] *= -1\n",
|
||||
" elif builtin[j][i] > 0.0 and V[j][i] < 0.0:\n",
|
||||
" V[j][i] *= -1\n",
|
||||
"\n",
|
||||
" return V\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def check_sign_U(U, builtin):\n",
|
||||
" for i in range(0,builtin.shape[0]):\n",
|
||||
" for j in range(0,builtin.shape[1]):\n",
|
||||
" if builtin[j][i] < 0.0 and U[j][i] > 0.0:\n",
|
||||
" U[j][i] *= -1\n",
|
||||
" elif builtin[j][i] > 0.0 and U[j][i] < 0.0:\n",
|
||||
" U[j][i] *= -1\n",
|
||||
"\n",
|
||||
" return U\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.array([[1,0, 2], \n",
|
||||
" [0, 0, 0],\n",
|
||||
" [0, 0, 0],\n",
|
||||
" [0, 4, 0]])\n",
|
||||
"U,s,V = calculate(np.transpose(a))\n",
|
||||
"U1,s1,V1 = svd(a)\n",
|
||||
"U = check_sign_U(U, U1)\n",
|
||||
"V = check_sign_V(V, V1)\n",
|
||||
"print(V.shape[0])\n",
|
||||
"print('U: ', U, '\\n', 's: ',s, '\\n','V: ',V, '\\n')\n",
|
||||
"print('--------------------------------------')\n",
|
||||
"print('U1: ',U1, '\\n','s1: ',s1, '\\n', 'V1: ',V1, '\\n')\n",
|
||||
"k = 4\n",
|
||||
"reconst_matrix4 = np.dot(U[:,:k],np.dot(np.diag(s[:k]),V[:k,:]))\n",
|
||||
"print('reconst -------------- ', reconst_matrix4)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": 293,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
@ -214,11 +279,27 @@
|
||||
" \"\"\"\n",
|
||||
" Wykonaj dekompozycję SVD, a następnie okrojoną rekonstrukcję (przy użyciu k wartości/wektorów osobliwych)\n",
|
||||
" \"\"\"\n",
|
||||
"# U,s,V = svd(image,full_matrices=False)\n",
|
||||
" U,s,V = calculate(image)\n",
|
||||
" image = np.real(image)\n",
|
||||
" print(f'image ---------- {image}')\n",
|
||||
" U,s,V = svd(image,full_matrices=False)\n",
|
||||
" U1,s1,V1 = calculate(image)\n",
|
||||
" U1 = np.real(U1)\n",
|
||||
" s1 = np.real(s1)\n",
|
||||
" V1 = np.real(V1)\n",
|
||||
"# U1 = check_sign_U(U1, U)\n",
|
||||
"# V1 = check_sign_V(V1, V)\n",
|
||||
" print(U.shape, U1.shape)\n",
|
||||
" print(V.shape, V1.shape)\n",
|
||||
" print(s.shape, s1.shape)\n",
|
||||
" reconst_matrix = np.dot(U[:,:k],np.dot(np.diag(s[:k]),V[:k,:]))\n",
|
||||
" S = np.zeros(n)\n",
|
||||
" for i in range(0,k):\n",
|
||||
" suma[:,:i] += np.dot(np.dot(s1[i],U1[:,:i]), V1[:,:i])\n",
|
||||
" print(suma)\n",
|
||||
" reconst_matrix2 = np.dot(np.dot(np.diag(s1[:k]),U1[:,:k]),V1[:,:k])\n",
|
||||
" print(reconst_matrix, '============================================', reconst_matrix2)\n",
|
||||
"\n",
|
||||
" return reconst_matrix,s"
|
||||
" return reconst_matrix2,s"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -235,7 +316,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": 294,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
@ -274,7 +355,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": 295,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
@ -304,7 +385,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 21,
|
||||
"execution_count": 296,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
@ -324,8 +405,8 @@
|
||||
" original_shape = image.shape\n",
|
||||
" print(f\"Input image dimensions. Width:{original_shape[1]} Height:{original_shape[0]}\")\n",
|
||||
"\n",
|
||||
"# U,s,V = svd(image,full_matrices=False)\n",
|
||||
" U,s,V = calculate(image)\n",
|
||||
" U,s,V = svd(image,full_matrices=False)\n",
|
||||
"# U,s,V = calculate(image)\n",
|
||||
" print(f\"Shape of U matrix: {U[:,:k].shape}\")\n",
|
||||
" print(f\"U MATRIX: {U[:,:k]}\")\n",
|
||||
" print('*' * 100)\n",
|
||||
@ -338,7 +419,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"execution_count": 297,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
@ -348,12 +429,12 @@
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"model_id": "7c4a40e6f857407586d21ab113128a97",
|
||||
"model_id": "092923713cd74de2b08c173639aae9d4",
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
},
|
||||
"text/plain": [
|
||||
"interactive(children=(Dropdown(description='img_name', options=('cat', 'astro', 'coffee', 'rocket', 'koala', '…"
|
||||
"interactive(children=(Dropdown(description='img_name', options=('cat', 'astro', 'camera', 'coin', 'clock', 'te…"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@ -365,7 +446,7 @@
|
||||
"<function __main__.print_matrices(img_name, k)>"
|
||||
]
|
||||
},
|
||||
"execution_count": 22,
|
||||
"execution_count": 297,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@ -376,17 +457,18 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 298,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"scrolled": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"model_id": "3533923ce918489eab6fc7de25234078",
|
||||
"model_id": "95f52e9c633540678b6285ce25adaff0",
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
},
|
||||
@ -551,13 +633,14 @@
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"scrolled": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"model_id": "0af20b426d1240cca1e08e40ede10e98",
|
||||
"model_id": "9976c068c2cc40788cdce8bf0365c66a",
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
},
|
||||
@ -595,7 +678,7 @@
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"model_id": "86f500d175554478ac9805075a809d28",
|
||||
"model_id": "24661e5fa1644a349470561f5d9b1324",
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
},
|
||||
@ -703,7 +786,7 @@
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"model_id": "e97ca096507f42b49f98dbb87ac5a2ec",
|
||||
"model_id": "3026b3e43b6c4921abd17c4cf37e9954",
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
},
|
||||
@ -731,7 +814,7 @@
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"model_id": "71fea739144848d69afb1662172190ad",
|
||||
"model_id": "a93634f89fdf459189067b59638f3021",
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user