Added small experiments for Laplacian Matrix
This commit is contained in:
parent
8a023a6079
commit
017b6bc6e3
254
Chapters/14-GNN-GCN/python-experiments/laplacian_graph.ipynb
Normal file
254
Chapters/14-GNN-GCN/python-experiments/laplacian_graph.ipynb
Normal file
@ -0,0 +1,254 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "218c5394",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Laplacian Matrix powers\n",
|
||||
"\n",
|
||||
"For these experiments, I'll use this graph taken from wikipedia\n",
|
||||
"\n",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"id": "c717d831",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Normal L\n",
|
||||
"tensor([[ 2, -1, 0, 0, -1, 0],\n",
|
||||
" [-1, 3, -1, 0, -1, 0],\n",
|
||||
" [ 0, -1, 2, -1, 0, 0],\n",
|
||||
" [ 0, 0, -1, 3, -1, -1],\n",
|
||||
" [-1, -1, 0, -1, 3, 0],\n",
|
||||
" [ 0, 0, 0, -1, 0, 1]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L squared\n",
|
||||
"tensor([[ 6, -4, 1, 1, -4, 0],\n",
|
||||
" [-4, 12, -5, 2, -5, 0],\n",
|
||||
" [ 1, -5, 6, -5, 2, 1],\n",
|
||||
" [ 1, 2, -5, 12, -6, -4],\n",
|
||||
" [-4, -5, 2, -6, 12, 1],\n",
|
||||
" [ 0, 0, 1, -4, 1, 2]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L cubic\n",
|
||||
"tensor([[ 20, -15, 5, 6, -15, -1],\n",
|
||||
" [-15, 50, -24, 16, -25, -2],\n",
|
||||
" [ 5, -24, 22, -24, 15, 6],\n",
|
||||
" [ 6, 16, -24, 51, -33, -16],\n",
|
||||
" [-15, -25, 15, -33, 51, 7],\n",
|
||||
" [ -1, -2, 6, -16, 7, 6]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L forth\n",
|
||||
"tensor([[ 70, -55, 19, 29, -56, -7],\n",
|
||||
" [ -55, 214, -114, 99, -126, -18],\n",
|
||||
" [ 19, -114, 92, -115, 88, 30],\n",
|
||||
" [ 29, 99, -115, 226, -172, -67],\n",
|
||||
" [ -56, -126, 88, -172, 226, 40],\n",
|
||||
" [ -7, -18, 30, -67, 40, 22]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L fifth\n",
|
||||
"tensor([[ 251, -198, 64, 131, -212, -36],\n",
|
||||
" [-198, 937, -541, 555, -636, -117],\n",
|
||||
" [ 64, -541, 413, -555, 474, 145],\n",
|
||||
" [ 131, 555, -555, 1032, -870, -293],\n",
|
||||
" [-212, -636, 474, -870, 1032, 212],\n",
|
||||
" [ -36, -117, 145, -293, 212, 89]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L sixth\n",
|
||||
"tensor([[ 912, -697, 195, 577, -820, -167],\n",
|
||||
" [ -697, 4186, -2574, 2959, -3202, -672],\n",
|
||||
" [ 195, -2574, 1922, -2697, 2454, 700],\n",
|
||||
" [ 577, 2959, -2697, 4814, -4328, -1325],\n",
|
||||
" [ -820, -3202, 2454, -4328, 4814, 1082],\n",
|
||||
" [ -167, -672, 700, -1325, 1082, 382]])\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"\n",
|
||||
"L = torch.tensor([\n",
|
||||
" [2, -1, 0, 0, -1, 0],\n",
|
||||
" [-1, 3, -1, 0, -1, 0],\n",
|
||||
" [0, -1, 2, -1, 0, 0],\n",
|
||||
" [0, 0, -1, 3, -1, -1],\n",
|
||||
" [-1, -1, 0, -1, 3, 0],\n",
|
||||
" [0, 0, 0, -1, 0, 1]\n",
|
||||
"])\n",
|
||||
"L_2 = L@L\n",
|
||||
"L_3 = L_2@L\n",
|
||||
"L_4 = L_3@L\n",
|
||||
"L_5 = L_4@L\n",
|
||||
"L_6 = L_5@L\n",
|
||||
"print(\"Normal L\")\n",
|
||||
"print(L)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L squared\")\n",
|
||||
"print(L_2)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L cubic\")\n",
|
||||
"print(L_3)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L forth\")\n",
|
||||
"print(L_4)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L fifth\")\n",
|
||||
"print(L_5)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L sixth\")\n",
|
||||
"print(L_6)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "1b01bf03",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## More experiments\n",
|
||||
"\n",
|
||||
"Hee we'll connect each node is connected to the previous and next"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "dd51c047",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Normal L\n",
|
||||
"tensor([[ 1, -1, 0, 0, 0, 0],\n",
|
||||
" [-1, 1, -1, 0, 0, 0],\n",
|
||||
" [ 0, -1, 1, -1, 0, 0],\n",
|
||||
" [ 0, 0, -1, 1, -1, 0],\n",
|
||||
" [ 0, 0, 0, -1, 1, -1],\n",
|
||||
" [ 0, 0, 0, 0, -1, 1]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L squared\n",
|
||||
"tensor([[ 2, -2, 1, 0, 0, 0],\n",
|
||||
" [-2, 3, -2, 1, 0, 0],\n",
|
||||
" [ 1, -2, 3, -2, 1, 0],\n",
|
||||
" [ 0, 1, -2, 3, -2, 1],\n",
|
||||
" [ 0, 0, 1, -2, 3, -2],\n",
|
||||
" [ 0, 0, 0, 1, -2, 2]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L cubic\n",
|
||||
"tensor([[ 4, -5, 3, -1, 0, 0],\n",
|
||||
" [-5, 7, -6, 3, -1, 0],\n",
|
||||
" [ 3, -6, 7, -6, 3, -1],\n",
|
||||
" [-1, 3, -6, 7, -6, 3],\n",
|
||||
" [ 0, -1, 3, -6, 7, -5],\n",
|
||||
" [ 0, 0, -1, 3, -5, 4]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L forth\n",
|
||||
"tensor([[ 9, -12, 9, -4, 1, 0],\n",
|
||||
" [-12, 18, -16, 10, -4, 1],\n",
|
||||
" [ 9, -16, 19, -16, 10, -4],\n",
|
||||
" [ -4, 10, -16, 19, -16, 9],\n",
|
||||
" [ 1, -4, 10, -16, 18, -12],\n",
|
||||
" [ 0, 1, -4, 9, -12, 9]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L fifth\n",
|
||||
"tensor([[ 21, -30, 25, -14, 5, -1],\n",
|
||||
" [-30, 46, -44, 30, -15, 5],\n",
|
||||
" [ 25, -44, 51, -45, 30, -14],\n",
|
||||
" [-14, 30, -45, 51, -44, 25],\n",
|
||||
" [ 5, -15, 30, -44, 46, -30],\n",
|
||||
" [ -1, 5, -14, 25, -30, 21]])\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"L sixth\n",
|
||||
"tensor([[ 51, -76, 69, -44, 20, -6],\n",
|
||||
" [ -76, 120, -120, 89, -50, 20],\n",
|
||||
" [ 69, -120, 140, -126, 89, -44],\n",
|
||||
" [ -44, 89, -126, 140, -120, 69],\n",
|
||||
" [ 20, -50, 89, -120, 120, -76],\n",
|
||||
" [ -6, 20, -44, 69, -76, 51]])\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"L = torch.tensor([\n",
|
||||
" [1, -1, 0, 0, 0, 0],\n",
|
||||
" [-1, 1, -1, 0, 0, 0],\n",
|
||||
" [0, -1, 1, -1, 0, 0],\n",
|
||||
" [0, 0, -1, 1, -1, 0],\n",
|
||||
" [0, 0, 0, -1, 1, -1],\n",
|
||||
" [0, 0, 0, 0, -1, 1]\n",
|
||||
"])\n",
|
||||
"L_2 = L@L\n",
|
||||
"L_3 = L_2@L\n",
|
||||
"L_4 = L_3@L\n",
|
||||
"L_5 = L_4@L\n",
|
||||
"L_6 = L_5@L\n",
|
||||
"print(\"Normal L\")\n",
|
||||
"print(L)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L squared\")\n",
|
||||
"print(L_2)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L cubic\")\n",
|
||||
"print(L_3)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L forth\")\n",
|
||||
"print(L_4)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L fifth\")\n",
|
||||
"print(L_5)\n",
|
||||
"print(\"\\n\")\n",
|
||||
"print(\"L sixth\")\n",
|
||||
"print(L_6)\n",
|
||||
"print(\"\\n\")"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "deep_learning",
|
||||
"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.13.7"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user