{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "5b79eca0", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2022-02-24 11:43:32.681716: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", "2022-02-24 11:43:32.681748: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n" ] } ], "source": [ "from library.NNSearch_experimental import NNSearch\n", "from library.timing import timing\n", "from sklearn.neighbors import NearestNeighbors\n", "import numpy as np\n", "import tensorflow as tf\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "id": "fd8d89ea", "metadata": {}, "outputs": [], "source": [ "n_features = 100\n", "numPoints = 2000\n", "maxValue = 5000\n", "nbhSize = 5" ] }, { "cell_type": "code", "execution_count": 3, "id": "234f0cc7", "metadata": {}, "outputs": [], "source": [ "data = np.array([\n", " np.array([float(x) for x in np.random.randint(maxValue, size=n_features)])\n", " for _i in range(numPoints)])" ] }, { "cell_type": "code", "execution_count": 4, "id": "6388fa61", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2000" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(data)" ] }, { "cell_type": "code", "execution_count": 5, "id": "c5ef8b57", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/kristian/anaconda3/lib/python3.9/site-packages/sklearn/utils/validation.py:70: FutureWarning: Pass n_neighbors=5 as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error\n", " warnings.warn(f\"Pass {args_msg} as keyword args. From version \"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "NearestNeighbours: #1 3.2986s\n" ] } ], "source": [ "tNN = timing(\"NearestNeighbours\")\n", "tNN.start()\n", "nn = NearestNeighbors(nbhSize)\n", "nn.fit(data)\n", "for x in data:\n", " nbh = nn.kneighbors([x], nbhSize, return_distance=False)\n", "tNN.stop()\n", "print(tNN)" ] }, { "cell_type": "code", "execution_count": 6, "id": "84950ba8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NNSearch: #1 3.3141s\n" ] } ], "source": [ "tNNS = timing(\"NNSearch\")\n", "tNNS.start()\n", "nnb = NNSearch(nbhSize)\n", "nnb.fit(data)\n", "for x in range(len(data)):\n", " nbh = nnb.neighbourhoodOfItem(x)\n", "tNNS.stop()\n", "print(tNNS)" ] }, { "cell_type": "code", "execution_count": 7, "id": "b61b26cb", "metadata": { "scrolled": false }, "outputs": [], "source": [ "#tNNSH = timing(\"NNSearch\")\n", "#tNNSH.start()\n", "#nnh = NNSearch(nbhSize)\n", "#nnh.fit_heuristic(data)\n", "#for x in range(len(data)):\n", "# nbh = nnh.neighbourhoodOfItem(x)\n", "#tNNSH.stop()\n", "#print(tNNSH)" ] }, { "cell_type": "code", "execution_count": 8, "id": "686265dc", "metadata": {}, "outputs": [], "source": [ "#for i in range(len(data)):\n", "# nb = set(nnb.neighbourhoodOfItem(i))\n", "# nh = set(nnh.neighbourhoodOfItem(i))\n", "# if nb != nh:\n", "# print(f\"#{i}: {nb} != {nh}\")\n", "# break\n", "#print(f\"last: {nb} {nh}\")" ] }, { "cell_type": "code", "execution_count": 9, "id": "ca269d98", "metadata": {}, "outputs": [], "source": [ "def testNNSearchByQueries(nQueries):\n", " timingBf = {}\n", " timingCh = {}\n", " \n", " print(f\"\\n#Queries: {nQueries}\")\n", " tNN = timing(\"NNSearch - c library\")\n", " tNN.start()\n", " nn = NNSearch(nbhSize, timingBf)\n", " nn.fit_cLib(data)\n", " n = 0\n", " while n < nQueries:\n", " for x in range(len(data)):\n", " nbh = nn.neighbourhoodOfItem(x)\n", " n += 1\n", " if n >= nQueries:\n", " break\n", " tNN.stop()\n", " print(tNN)\n", " \n", " tNN_bf = timing(\"NNSearch - brute force\")\n", " tNN_bf.start()\n", " nn = NNSearch(nbhSize, timingBf)\n", " nn.fit_bruteForce_np(data)\n", " n = 0\n", " while n < nQueries:\n", " for x in range(len(data)):\n", " nbh = nn.neighbourhoodOfItem(x)\n", " n += 1\n", " if n >= nQueries:\n", " break\n", " tNN_bf.stop()\n", " print(tNN_bf)\n", " for k in timingBf.keys():\n", " print(timingBf[k])\n", "\n", " \n", " tNN_ch = timing(\"NNSearch - chained\")\n", " tNN_ch.start()\n", " nn = NNSearch(nbhSize, timingCh)\n", " nn.fit_chained(data)\n", " n = 0\n", " while n < nQueries:\n", " for x in range(len(data)):\n", " nbh = nn.neighbourhoodOfItem(x)\n", " n += 1\n", " if n >= nQueries:\n", " break\n", " tNN_ch.stop()\n", " print(tNN_ch)\n", " for k in timingCh.keys():\n", " print(timingCh[k])\n", "\n", " return (tNN.duration, tNN_bf.duration, tNN_ch.duration)" ] }, { "cell_type": "code", "execution_count": 10, "id": "1fd643cc", "metadata": {}, "outputs": [], "source": [ "def showResults(results):\n", " xs = [r[0] for r in results]\n", " ys = [r[1][0] for r in results]\n", " zs_bf = [r[1][1] for r in results]\n", " zs_ch = [r[1][2] for r in results]\n", "\n", " plt.xscale(\"log\")\n", " #plt.yscale(\"log\")\n", " plt.plot(xs, ys, label=\"NN\")\n", " plt.plot(xs, zs_bf, label=\"NN - bf\")\n", " plt.plot(xs, zs_ch, label=\"NN - ch\")\n", " plt.legend()\n", " plt.show\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "95b332a3", "metadata": { "scrolled": false }, "outputs": [], "source": [ "def randomPoint():\n", " return np.array([\n", " float(x)\n", " for x in np.random.randint(maxValue, size=n_features)\n", " ])\n", "\n", "def runTest():\n", " data = np.array([randomPoint() for _i in range(numPoints)])\n", " \n", " q = len(data) / 8\n", " results = []\n", " while q <= 8 * len(data):\n", " results.append((q, testNNSearchByQueries(q)))\n", " q *= 2\n", "\n", " showResults(results) \n", " \n", " return results" ] }, { "cell_type": "code", "execution_count": 12, "id": "61482cae", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "#Queries: 250.0\n", "NNSearch - c library: #1 0.4133s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2022-02-24 11:43:36.611803: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory\n", "2022-02-24 11:43:36.611822: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)\n", "2022-02-24 11:43:36.611837: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (sbi-klabautermann): /proc/driver/nvidia/version does not exist\n", "2022-02-24 11:43:36.612045: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "NNSearch - brute force: #1 18.4556s\n", "NN_fit_cLib_init: #1 0.0086s\n", "NN_fit_cLib_call: #1 0.4044s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0080s\n", "NN_fit_bfnp_loop: #1 18.4475s\n", "NN_fit_bfnp_dist: #2000 6.1461s\n", "NN_fit_bfnp_insert: #1999000 8.3253s\n", "NN_fit_bfnp_toList: #2000 0.0077s\n", "NNSearch - chained: #1 3.3154s\n", "NN_fit_chained_init: #1 0.0008s\n", "NN_fit_chained_toList: #1 3.3142s\n", "\n", "#Queries: 500.0\n", "NNSearch - c library: #1 0.7598s\n", "NNSearch - brute force: #1 18.4557s\n", "NN_fit_cLib_init: #1 0.0098s\n", "NN_fit_cLib_call: #1 0.7497s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0025s\n", "NN_fit_bfnp_loop: #1 18.4529s\n", "NN_fit_bfnp_dist: #2000 6.1264s\n", "NN_fit_bfnp_insert: #1999000 8.3765s\n", "NN_fit_bfnp_toList: #2000 0.0078s\n", "NNSearch - chained: #1 3.3012s\n", "NN_fit_chained_init: #1 0.0010s\n", "NN_fit_chained_toList: #1 3.2996s\n", "\n", "#Queries: 1000.0\n", "NNSearch - c library: #1 0.7591s\n", "NNSearch - brute force: #1 18.3439s\n", "NN_fit_cLib_init: #1 0.0095s\n", "NN_fit_cLib_call: #1 0.7493s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0025s\n", "NN_fit_bfnp_loop: #1 18.3410s\n", "NN_fit_bfnp_dist: #2000 6.1047s\n", "NN_fit_bfnp_insert: #1999000 8.3137s\n", "NN_fit_bfnp_toList: #2000 0.0076s\n", "NNSearch - chained: #1 3.3584s\n", "NN_fit_chained_init: #1 0.0004s\n", "NN_fit_chained_toList: #1 3.3569s\n", "\n", "#Queries: 2000.0\n", "NNSearch - c library: #1 0.7587s\n", "NNSearch - brute force: #1 18.3306s\n", "NN_fit_cLib_init: #1 0.0097s\n", "NN_fit_cLib_call: #1 0.7484s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0027s\n", "NN_fit_bfnp_loop: #1 18.3274s\n", "NN_fit_bfnp_dist: #2000 6.1040s\n", "NN_fit_bfnp_insert: #1999000 8.3008s\n", "NN_fit_bfnp_toList: #2000 0.0076s\n", "NNSearch - chained: #1 3.2975s\n", "NN_fit_chained_init: #1 0.0007s\n", "NN_fit_chained_toList: #1 3.2947s\n", "\n", "#Queries: 4000.0\n", "NNSearch - c library: #1 0.7593s\n", "NNSearch - brute force: #1 18.3324s\n", "NN_fit_cLib_init: #1 0.0094s\n", "NN_fit_cLib_call: #1 0.7490s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0027s\n", "NN_fit_bfnp_loop: #1 18.3288s\n", "NN_fit_bfnp_dist: #2000 6.1070s\n", "NN_fit_bfnp_insert: #1999000 8.3046s\n", "NN_fit_bfnp_toList: #2000 0.0077s\n", "NNSearch - chained: #1 3.3122s\n", "NN_fit_chained_init: #1 0.0006s\n", "NN_fit_chained_toList: #1 3.3081s\n", "\n", "#Queries: 8000.0\n", "NNSearch - c library: #1 0.7573s\n", "NNSearch - brute force: #1 18.3126s\n", "NN_fit_cLib_init: #1 0.0088s\n", "NN_fit_cLib_call: #1 0.7469s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0029s\n", "NN_fit_bfnp_loop: #1 18.3082s\n", "NN_fit_bfnp_dist: #2000 6.0901s\n", "NN_fit_bfnp_insert: #1999000 8.3084s\n", "NN_fit_bfnp_toList: #2000 0.0075s\n", "NNSearch - chained: #1 3.3166s\n", "NN_fit_chained_init: #1 0.0009s\n", "NN_fit_chained_toList: #1 3.3098s\n", "\n", "#Queries: 16000.0\n", "NNSearch - c library: #1 0.7576s\n", "NNSearch - brute force: #1 18.4571s\n", "NN_fit_cLib_init: #1 0.0094s\n", "NN_fit_cLib_call: #1 0.7453s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0025s\n", "NN_fit_bfnp_loop: #1 18.4515s\n", "NN_fit_bfnp_dist: #2000 6.1111s\n", "NN_fit_bfnp_insert: #1999000 8.4284s\n", "NN_fit_bfnp_toList: #2000 0.0075s\n", "NNSearch - chained: #1 3.2805s\n", "NN_fit_chained_init: #1 0.0006s\n", "NN_fit_chained_toList: #1 3.2686s\n", "(250.0, (0.41331771900000014, 18.455633648000003, 3.315403668000002))\n", "(500.0, (0.7598427959999974, 18.45573823, 3.3011977029999997))\n", "(1000.0, (0.7591332980000018, 18.343903463999993, 3.358379164000013))\n", "(2000.0, (0.7587481580000031, 18.330615655999992, 3.297500302000003))\n", "(4000.0, (0.7592784439999889, 18.33242251099999, 3.3122097149999945))\n", "(8000.0, (0.757345462999993, 18.312577753, 3.316645204000025))\n", "(16000.0, (0.7576112060000071, 18.457058905999986, 3.2805387499999767))\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "results = runTest()\n", "for r in results:\n", " print(r)" ] }, { "cell_type": "code", "execution_count": 13, "id": "ace1968a", "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "#Queries: 250.0\n", "NNSearch - c library: #1 0.3665s\n", "NNSearch - brute force: #1 40.6219s\n", "NN_fit_cLib_init: #1 0.0042s\n", "NN_fit_cLib_call: #1 0.3620s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0027s\n", "NN_fit_bfnp_loop: #1 40.6187s\n", "NN_fit_bfnp_dist: #2000 6.8666s\n", "NN_fit_bfnp_insert: #1999000 29.1163s\n", "NN_fit_bfnp_toList: #2000 0.1129s\n", "NNSearch - chained: #1 3.5609s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 3.5528s\n", "\n", "#Queries: 500.0\n", "NNSearch - c library: #1 0.9174s\n", "NNSearch - brute force: #1 40.5280s\n", "NN_fit_cLib_init: #1 0.0175s\n", "NN_fit_cLib_call: #1 0.8995s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0032s\n", "NN_fit_bfnp_loop: #1 40.5233s\n", "NN_fit_bfnp_dist: #2000 6.8904s\n", "NN_fit_bfnp_insert: #1999000 29.0154s\n", "NN_fit_bfnp_toList: #2000 0.1151s\n", "NNSearch - chained: #1 3.6235s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 3.6147s\n", "\n", "#Queries: 1000.0\n", "NNSearch - c library: #1 0.9206s\n", "NNSearch - brute force: #1 40.6397s\n", "NN_fit_cLib_init: #1 0.0176s\n", "NN_fit_cLib_call: #1 0.9026s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0031s\n", "NN_fit_bfnp_loop: #1 40.6353s\n", "NN_fit_bfnp_dist: #2000 6.9000s\n", "NN_fit_bfnp_insert: #1999000 29.0495s\n", "NN_fit_bfnp_toList: #2000 0.1152s\n", "NNSearch - chained: #1 3.6039s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 3.5942s\n", "\n", "#Queries: 2000.0\n", "NNSearch - c library: #1 0.9174s\n", "NNSearch - brute force: #1 40.6344s\n", "NN_fit_cLib_init: #1 0.0177s\n", "NN_fit_cLib_call: #1 0.8990s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0030s\n", "NN_fit_bfnp_loop: #1 40.6305s\n", "NN_fit_bfnp_dist: #2000 6.9096s\n", "NN_fit_bfnp_insert: #1999000 29.0766s\n", "NN_fit_bfnp_toList: #2000 0.1144s\n", "NNSearch - chained: #1 3.5827s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 3.5711s\n", "\n", "#Queries: 4000.0\n", "NNSearch - c library: #1 0.9173s\n", "NNSearch - brute force: #1 40.6204s\n", "NN_fit_cLib_init: #1 0.0167s\n", "NN_fit_cLib_call: #1 0.8998s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0030s\n", "NN_fit_bfnp_loop: #1 40.6150s\n", "NN_fit_bfnp_dist: #2000 6.9202s\n", "NN_fit_bfnp_insert: #1999000 29.0629s\n", "NN_fit_bfnp_toList: #2000 0.1149s\n", "NNSearch - chained: #1 3.5651s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 3.5525s\n", "\n", "#Queries: 8000.0\n", "NNSearch - c library: #1 0.9200s\n", "NNSearch - brute force: #1 40.6526s\n", "NN_fit_cLib_init: #1 0.0179s\n", "NN_fit_cLib_call: #1 0.9005s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0031s\n", "NN_fit_bfnp_loop: #1 40.6477s\n", "NN_fit_bfnp_dist: #2000 6.9088s\n", "NN_fit_bfnp_insert: #1999000 29.0992s\n", "NN_fit_bfnp_toList: #2000 0.1151s\n", "NNSearch - chained: #1 3.5696s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 3.5547s\n", "\n", "#Queries: 16000.0\n", "NNSearch - c library: #1 0.9161s\n", "NNSearch - brute force: #1 40.7653s\n", "NN_fit_cLib_init: #1 0.0179s\n", "NN_fit_cLib_call: #1 0.8953s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0030s\n", "NN_fit_bfnp_loop: #1 40.7590s\n", "NN_fit_bfnp_dist: #2000 6.9021s\n", "NN_fit_bfnp_insert: #1999000 29.2042s\n", "NN_fit_bfnp_toList: #2000 0.1152s\n", "NNSearch - chained: #1 3.5502s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 3.5299s\n" ] }, { "data": { "text/plain": [ "[(250.0, (0.36651359100000036, 40.621861386000006, 3.5609377680000023)),\n", " (500.0, (0.9173765810000134, 40.52795477799998, 3.623458453999973)),\n", " (1000.0, (0.9206065179999996, 40.639718562999974, 3.6038630779999608)),\n", " (2000.0, (0.9173525280000376, 40.634438639999985, 3.582748578999997)),\n", " (4000.0, (0.917308208999998, 40.62041566300002, 3.5651151870000035)),\n", " (8000.0, (0.9199733539999784, 40.65264302700001, 3.569597987999998)),\n", " (16000.0, (0.9160548799999901, 40.765329880000024, 3.550222713000039))]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n_features = 100\n", "numPoints = 2000\n", "maxValue = 5000\n", "nbhSize = 500\n", "runTest()" ] }, { "cell_type": "code", "execution_count": 14, "id": "f542bd77", "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "#Queries: 2000\n", "NNSearch - c library: #1 0.1868s\n", "NNSearch - brute force: #1 18.0886s\n", "NN_fit_cLib_init: #1 0.0022s\n", "NN_fit_cLib_call: #1 0.1841s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0033s\n", "NN_fit_bfnp_loop: #1 18.0847s\n", "NN_fit_bfnp_dist: #2000 6.1667s\n", "NN_fit_bfnp_insert: #1999000 7.9946s\n", "NN_fit_bfnp_toList: #2000 0.0080s\n", "NNSearch - chained: #1 3.1276s\n", "NN_fit_chained_init: #1 0.0010s\n", "NN_fit_chained_toList: #1 3.1246s\n", "\n", "#Queries: 2000\n", "NNSearch - c library: #1 0.7574s\n", "NNSearch - brute force: #1 18.3630s\n", "NN_fit_cLib_init: #1 0.0090s\n", "NN_fit_cLib_call: #1 0.7479s\n", "NN_fit_cLib_list: #1 0.0003s\n", "NN_fit_bfnp_init: #1 0.0028s\n", "NN_fit_bfnp_loop: #1 18.3596s\n", "NN_fit_bfnp_dist: #2000 6.1364s\n", "NN_fit_bfnp_insert: #1999000 8.2753s\n", "NN_fit_bfnp_toList: #2000 0.0078s\n", "NNSearch - chained: #1 3.3637s\n", "NN_fit_chained_init: #1 0.0005s\n", "NN_fit_chained_toList: #1 3.3613s\n", "\n", "#Queries: 2000\n", "NNSearch - c library: #1 0.7597s\n", "NNSearch - brute force: #1 18.6835s\n", "NN_fit_cLib_init: #1 0.0098s\n", "NN_fit_cLib_call: #1 0.7494s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0025s\n", "NN_fit_bfnp_loop: #1 18.6805s\n", "NN_fit_bfnp_dist: #2000 6.1593s\n", "NN_fit_bfnp_insert: #1999000 8.5874s\n", "NN_fit_bfnp_toList: #2000 0.0083s\n", "NNSearch - chained: #1 3.3275s\n", "NN_fit_chained_init: #1 0.0009s\n", "NN_fit_chained_toList: #1 3.3245s\n", "\n", "#Queries: 2000\n", "NNSearch - c library: #1 0.7636s\n", "NNSearch - brute force: #1 19.2814s\n", "NN_fit_cLib_init: #1 0.0102s\n", "NN_fit_cLib_call: #1 0.7528s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0029s\n", "NN_fit_bfnp_loop: #1 19.2779s\n", "NN_fit_bfnp_dist: #2000 6.1618s\n", "NN_fit_bfnp_insert: #1999000 9.1725s\n", "NN_fit_bfnp_toList: #2000 0.0085s\n", "NNSearch - chained: #1 3.3283s\n", "NN_fit_chained_init: #1 0.0007s\n", "NN_fit_chained_toList: #1 3.3254s\n", "\n", "#Queries: 2000\n", "NNSearch - c library: #1 0.7696s\n", "NNSearch - brute force: #1 20.3835s\n", "NN_fit_cLib_init: #1 0.0085s\n", "NN_fit_cLib_call: #1 0.7605s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0030s\n", "NN_fit_bfnp_loop: #1 20.3799s\n", "NN_fit_bfnp_dist: #2000 6.1821s\n", "NN_fit_bfnp_insert: #1999000 10.2071s\n", "NN_fit_bfnp_toList: #2000 0.0104s\n", "NNSearch - chained: #1 3.3752s\n", "NN_fit_chained_init: #1 0.0011s\n", "NN_fit_chained_toList: #1 3.3717s\n", "\n", "#Queries: 2000\n", "NNSearch - c library: #1 0.7852s\n", "NNSearch - brute force: #1 22.4075s\n", "NN_fit_cLib_init: #1 0.0100s\n", "NN_fit_cLib_call: #1 0.7745s\n", "NN_fit_cLib_list: #1 0.0003s\n", "NN_fit_bfnp_init: #1 0.0030s\n", "NN_fit_bfnp_loop: #1 22.4040s\n", "NN_fit_bfnp_dist: #2000 6.2513s\n", "NN_fit_bfnp_insert: #1999000 12.1458s\n", "NN_fit_bfnp_toList: #2000 0.0130s\n", "NNSearch - chained: #1 3.4300s\n", "NN_fit_chained_init: #1 0.0004s\n", "NN_fit_chained_toList: #1 3.4265s\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def testNbhSize():\n", " global nbhSize\n", " data = np.array([randomPoint() for _i in range(numPoints)])\n", " q = len(data)\n", " nbhSize = 2\n", " results = []\n", " while nbhSize < 100:\n", " results.append((nbhSize, testNNSearchByQueries(q)))\n", " nbhSize *= 2\n", " showResults(results)\n", " \n", "n_features = 100\n", "numPoints = 2000\n", "maxValue = 5000\n", "nbhSize = 500\n", "\n", "testNbhSize()" ] }, { "cell_type": "code", "execution_count": 15, "id": "1254b22c", "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.0207s\n", "NNSearch - brute force: #1 14.7883s\n", "NN_fit_cLib_init: #1 0.0029s\n", "NN_fit_cLib_call: #1 0.0169s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0032s\n", "NN_fit_bfnp_loop: #1 14.7844s\n", "NN_fit_bfnp_dist: #2000 2.9595s\n", "NN_fit_bfnp_insert: #1999000 7.9417s\n", "NN_fit_bfnp_toList: #2000 0.0071s\n", "NNSearch - chained: #1 0.5546s\n", "NN_fit_chained_init: #1 0.0010s\n", "NN_fit_chained_toList: #1 0.5527s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.0195s\n", "NNSearch - brute force: #1 15.1936s\n", "NN_fit_cLib_init: #1 0.0023s\n", "NN_fit_cLib_call: #1 0.0165s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0026s\n", "NN_fit_bfnp_loop: #1 15.1902s\n", "NN_fit_bfnp_dist: #2000 3.0803s\n", "NN_fit_bfnp_insert: #1999000 8.1906s\n", "NN_fit_bfnp_toList: #2000 0.0075s\n", "NNSearch - chained: #1 0.5586s\n", "NN_fit_chained_init: #1 0.0011s\n", "NN_fit_chained_toList: #1 0.5565s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.0206s\n", "NNSearch - brute force: #1 15.2754s\n", "NN_fit_cLib_init: #1 0.0021s\n", "NN_fit_cLib_call: #1 0.0177s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0028s\n", "NN_fit_bfnp_loop: #1 15.2719s\n", "NN_fit_bfnp_dist: #2000 3.1631s\n", "NN_fit_bfnp_insert: #1999000 8.1719s\n", "NN_fit_bfnp_toList: #2000 0.0074s\n", "NNSearch - chained: #1 0.5972s\n", "NN_fit_chained_init: #1 0.0022s\n", "NN_fit_chained_toList: #1 0.5940s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.0303s\n", "NNSearch - brute force: #1 16.0090s\n", "NN_fit_cLib_init: #1 0.0020s\n", "NN_fit_cLib_call: #1 0.0275s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0028s\n", "NN_fit_bfnp_loop: #1 16.0053s\n", "NN_fit_bfnp_dist: #2000 3.4893s\n", "NN_fit_bfnp_insert: #1999000 8.4940s\n", "NN_fit_bfnp_toList: #2000 0.0079s\n", "NNSearch - chained: #1 2.3343s\n", "NN_fit_chained_init: #1 0.0004s\n", "NN_fit_chained_toList: #1 2.3305s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.2375s\n", "NNSearch - brute force: #1 16.4536s\n", "NN_fit_cLib_init: #1 0.0081s\n", "NN_fit_cLib_call: #1 0.2260s\n", "NN_fit_cLib_list: #1 0.0010s\n", "NN_fit_bfnp_init: #1 0.0116s\n", "NN_fit_bfnp_loop: #1 16.4409s\n", "NN_fit_bfnp_dist: #2000 3.8518s\n", "NN_fit_bfnp_insert: #1999000 8.5966s\n", "NN_fit_bfnp_toList: #2000 0.0078s\n", "NNSearch - chained: #1 2.4672s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 2.4637s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.4435s\n", "NNSearch - brute force: #1 17.9644s\n", "NN_fit_cLib_init: #1 0.0090s\n", "NN_fit_cLib_call: #1 0.4312s\n", "NN_fit_cLib_list: #1 0.0009s\n", "NN_fit_bfnp_init: #1 0.0118s\n", "NN_fit_bfnp_loop: #1 17.9516s\n", "NN_fit_bfnp_dist: #2000 5.4532s\n", "NN_fit_bfnp_insert: #1999000 8.5263s\n", "NN_fit_bfnp_toList: #2000 0.0079s\n", "NNSearch - chained: #1 2.9103s\n", "NN_fit_chained_init: #1 0.0009s\n", "NN_fit_chained_toList: #1 2.9061s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.6264s\n", "NNSearch - brute force: #1 23.0962s\n", "NN_fit_cLib_init: #1 0.0090s\n", "NN_fit_cLib_call: #1 0.6165s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0033s\n", "NN_fit_bfnp_loop: #1 23.0921s\n", "NN_fit_bfnp_dist: #2000 10.4626s\n", "NN_fit_bfnp_insert: #1999000 8.6170s\n", "NN_fit_bfnp_toList: #2000 0.0085s\n", "NNSearch - chained: #1 3.6817s\n", "NN_fit_chained_init: #1 0.0011s\n", "NN_fit_chained_toList: #1 3.6776s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 0.7747s\n", "NNSearch - brute force: #1 31.6954s\n", "NN_fit_cLib_init: #1 0.0086s\n", "NN_fit_cLib_call: #1 0.7653s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0026s\n", "NN_fit_bfnp_loop: #1 31.6920s\n", "NN_fit_bfnp_dist: #2000 19.2404s\n", "NN_fit_bfnp_insert: #1999000 8.5087s\n", "NN_fit_bfnp_toList: #2000 0.0080s\n", "NNSearch - chained: #1 5.7861s\n", "NN_fit_chained_init: #1 0.0005s\n", "NN_fit_chained_toList: #1 5.7823s\n", "\n", "#Queries: 4000\n", "NNSearch - c library: #1 1.1227s\n", "NNSearch - brute force: #1 49.6985s\n", "NN_fit_cLib_init: #1 0.0085s\n", "NN_fit_cLib_call: #1 1.1133s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0036s\n", "NN_fit_bfnp_loop: #1 49.6940s\n", "NN_fit_bfnp_dist: #2000 36.5808s\n", "NN_fit_bfnp_insert: #1999000 8.9424s\n", "NN_fit_bfnp_toList: #2000 0.0086s\n", "NNSearch - chained: #1 11.1587s\n", "NN_fit_chained_init: #1 0.0013s\n", "NN_fit_chained_toList: #1 11.1542s\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD8CAYAAABuHP8oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAjgklEQVR4nO3deXxU9b3/8dd3lmQStqwii2yaUJBNTFHU1gUX/F1vEau0WloXvFy7uFy9bentotjeXhdqi1ZFrlhpay3aSl1qbxUUK14vmwqKCIqAokBWFslCZub7++NMkkkyIZNkZk4meT/beZwz37N9yMibb86c8z3GWouIiKQfj9sFiIhI5yjARUTSlAJcRCRNKcBFRNKUAlxEJE0pwEVE0pQvlQcrKCiwI0aMSOUhRUTS3oYNG8qttYUt21Ma4CNGjGD9+vWpPKSISNozxuyK1a5TKCIiaUoBLiKSphTgIiJpKq5z4MaYncAhIAQErbUlxpg8YBkwAtgJzLLWVnW0gPr6enbv3k1tbW1HN+0VAoEAQ4cOxe/3u12KiHQzHfkS82xrbXnU+3nASmvtHcaYeZH33+9oAbt376Zfv36MGDECY0xHN+/RrLVUVFSwe/duRo4c6XY5ItLNdOUUygxgaWR+KXBxZ3ZSW1tLfn6+wjsGYwz5+fn67UREYoo3wC3wgjFmgzFmbqRtoLV2D0BkekysDY0xc40x640x68vKymLuXOHdNv1sRNJcOAwb/wjBIwnfdbwBfrq1djJwIfBtY8wX4z2AtXaxtbbEWltSWNjqOvRuwRjDLbfc0vh+wYIF3HbbbQDcdtttZGdnU1pa2ri8b9++qS5RRNLV5qdg+b/C1r8mfNdxBbi19tPItBRYDkwB9hljBgFEpqVt76F7y8zM5KmnnqK8vDzm8oKCAn7xi1+kuCoRSXvBI/DST2HgOBgzI+G7bzfAjTF9jDH9GuaB84F3gGeAKyOrXQk8nfDqUsTn8zF37lx++ctfxlx+zTXXsGzZMiorK1NcmYiktTd/C1U7Ydqt4En8VdvxXIUyEFgeORfrA/5grf0fY8w64AljzBzgI+CyrhYz/9nNvPvpwa7uppmxg/tz6z+f2O563/72t5kwYQLf+973Wi3r27cv11xzDQsXLmT+/PkJrU9Eeqgjh+GVu2DYaVB0XlIO0W6AW2s/BCbGaK8ApiWjKDf079+fb3zjG9x7771kZWW1Wn7DDTcwadKkZufKRUTatGYRfLYPZv0WknQxQkoHs2pPPD3lZLrpppuYPHkyV199datlOTk5XHHFFTzwwAMuVCYiaaW6ElYvhOILYdipSTuMbqWPkpeXx6xZs1iyZEnM5TfffDMPPfQQwWAwxZWJSFp57VdQdxCm/Tiph1GAt3DLLbcc9WqUmTNnUldXl+KqRCRtHPwU1jwEE74CA5N7VsFYa5N6gGglJSW25XjgW7ZsYcyYMSmrIR3pZySSRp69Ed58DK5fD7kjErJLY8wGa21Jy3b1wEVEEqX8A3jjd1ByTcLC+2gU4CIiifLyz8AXgC/+e0oOpwAXEUmET9+Ezcth6rehb8yhoRJOAS4ikggrb4esPDjtOyk7pAJcRKSrPnwFtr8EX7gFAgNSdlgFuIhIV1gLK+dD/yHw+WtTemgFOMkfTnbVqlVcdNFFMZc9+eSTjBkzhrPPPrvjhYuI+957Dj7ZAGf9APyBlB5aAY67w8kuWbKEBx54gJdffjkp+xeRJAqHYOVPoaAYJl6e8sMrwEnNcLIHDx5k5syZjB07luuuu45wOMztt9/O6tWrue666/jud7/b6X2LiEs2/hHKt8I5PwZv6oeW6laDWfG3ebD37cTu89jxcOEd7a6W7OFk165dy7vvvsvw4cOZPn06Tz31FD/5yU946aWXWLBgASUlrW6yEpHurL4WVv0XDJ4MY/7ZlRLUA4+IHk42lhtuuIGlS5dy8GDnxiufMmUKo0aNwuv1cvnll7N69equlCsiblv/CBz4GM69LWnDxbane/XA4+gpJ1NXhpNdvnx5Y+/84YcfbtWjbvlwYj2sWCSN1R6EVxfAqLNh1JmulaEeeJSuDCc7c+ZM3nrrLd56662Yp0PWrl3Ljh07CIfDLFu2jDPOOCPh9YtIirx+P1RXwLSfuFqGAryFZA0nO3XqVObNm8e4ceMYOXIkM2fO7GqpIuKGz8rg9V/D2IthyGRXS9FwsmlAPyORbuRv82DtYvj2GigoSskhNZysiEhXVe2C9UvgpNkpC++jUYCLiMRr1R1gPHDm992uBFCAi4jEZ9+7sPFxmDIXBgxxuxpAAS4iEp+XfgaZ/eGMf3O7kkYKcBGR9ny8Frb+FU6/HrLz3K6mkQJcRORorIUVt0GfY+CUb7pdTTMKcJI/nGxbzjrrLFpeViki3cwHK2HXa3Dm9yAzMX/3E0UBjrvDyYpINxYOw8rbIGc4TL7S7WpaUYCTmuFk77rrLsaPH8/EiROZN29eY/uTTz7JlClTKC4u5tVXX+30/kUkCTY/5YyQes6PwJfhdjWtdKvBrO5ceyfvVb6X0H1+Lu9zfH9K+9dsJnM42b/97W/85S9/Yc2aNWRnZzf7hyAYDLJ27Vqef/555s+fz4oVKzq8fxFJglC9c+XJwHEw7lK3q4lJPfCIZA4nu2LFCq6++mqys7MBZ9CsBpdccgkAJ598Mjt37ux44SKSHG/8Fqp2OANWebpnVHarHng8PeVkStZwstbaNoePzczMBMDr9cYc5VBEXHCkGl65E4ZNhaLz3a6mTXH/s2KM8Rpj3jTGPBd5n2eMedEY835kmpu8MlMjWcPJnn/++TzyyCNUV1cDdOlcuoikwJpF8Nk+mHaraw9riEdHfi+4EdgS9X4esNJaWwSsjLxPe8kYTnb69Ol86UtfoqSkhEmTJrFgwYJElCoiyVBTBa/9Coqnw/CpbldzVHENJ2uMGQosBf4TuNlae5ExZitwlrV2jzFmELDKWjv6aPvRcLKdo5+RSAq9eCu8thCuWw3HjnO7GqDrw8n+CvgeEI5qG2it3QMQmR7TxoHnGmPWG2PWl5WVdaxqEZFUOvipc/pkwqxuE95H026AG2MuAkqttRs6cwBr7WJrbYm1tqSwsLAzuxARSY1X7oJwCM76gduVxCWeq1BOB75kjPl/QADob4z5PbDPGDMo6hRK6VH3IiLSnVVsdy4d/PwcyBvpdjVxabcHbq39gbV2qLV2BPBV4CVr7WzgGaDh3tIrgac7W0QqH+uWbvSzEUmRl34GvgB88btuVxK3rlydfgdwnjHmfeC8yPsOCwQCVFRUKKhisNZSUVFBIBBwuxSRnu3Tt5zb5qd+C/rG/DqvW+rQjTzW2lXAqsh8BTCtqwUMHTqU3bt3oy84YwsEAgwdOtTtMkR6tpW3Q1YunHa925V0iOt3Yvr9fkaOTI/zTSLSA+14FbavhPN/BoEBblfTId3zBn8RkVSwFlbOh/5D4PPXul1NhynARaT32vo87F4HZ80Df5bb1XSYAlxEeqdwyDn3nV8EE69wu5pOcf0cuIiIKzYtg7L3YNZvwZueUageuIj0PsE6ePnnMPgkGPMlt6vptPT8Z0dEpCvWPwIHPoYZv+7Ww8W2Rz1wEeld6g7BP+6GUWc5rzSmABeR3uX1+6G6wnlUWppTgItI73G4HP73Phg7A4ac7HY1XaYAF5He49VfQH0NnPNjtytJCAW4iPQO+z+CdQ/DSV+DgiK3q0kIBbiI9A6r7gAMnNkjHt8LKMBFpDco3QIbH4dT5sKAIW5XkzAKcBHp+V76GWT0hTNudruShFKAi0jP9vE6eO85OO0GyM5zu5qEUoCLSM9lLay4DfoUwqnfdLuahFOAi0jPtX0l7FoNX/weZPZ1u5qEU4CLSM8UDsOK+ZAzDE6+yu1qkkKDWYlIz/Tucti7CWYuBl+G29UkhXrgItLzhOqdK0+OORHGX+p2NUmjHriI9Dxv/g4qP4TLl4HH63Y1SaMeuIj0LEeqYdWdcNypUHyB29UklXrgItKzrH0IPtsLlz2a1g9riId64CLSc9RUwepfQtEFMHyq29UknQJcRHqO1xZC7cEe8bCGeCjARaRnqNgO/7cIxl8Gx45zu5qUUICLSPr79E145ALwZ8E5P3S7mpRRgItIetv+Ejx6EfiyYM4LkDvC7YpSRgEuIulr0xPw2GVOaM95occ8aSde7Qa4MSZgjFlrjNlojNlsjJkfac8zxrxojHk/Ms1NfrkiIhH/ex889S8wbCpc/Tz0H+R2RSkXTw+8DjjHWjsRmARMN8acCswDVlpri4CVkfciIskVDsPffwgv/AjGXgyz/wyBAW5X5Yp2A9w6Pou89UdeFpgBLI20LwUuTkaBIiKNgkecXvfrv4Yp/wqX/gZ8mW5X5Zq4zoEbY7zGmLeAUuBFa+0aYKC1dg9AZHpM0qoUEak7BH+4DN75E0y7FS68Ezy9+2u8uG6lt9aGgEnGmBxguTEm7ossjTFzgbkAw4YN60yNItLbfVYKj10Ke9+BGQ/ASV9zu6JuoUP/fFlr9wOrgOnAPmPMIIDItLSNbRZba0ustSWFhYVdq1ZEep+K7bDkPCh/H65YpvCOEs9VKIWRnjfGmCzgXOA94BngyshqVwJPJ6lGEemtPnkDlpzv3B5/5bNQdJ7bFXUr8ZxCGQQsNcZ4cQL/CWvtc8aY14EnjDFzgI+Ay5JYp4j0Nh+sgGXfgD75MHs5FJzgdkXdTrsBbq3dBJwUo70CmJaMokSkl9u4DJ7+FhSOgdl/gn7Hul1Rt9S7v8IVke7FWnjtXlg+F4afBlf/VeF9FHqgg4h0D+Gwc3PO/90PJ14CMxf16mu846EAFxH3BevgL9+Ed/4Mp3wTLvh5r7/GOx4KcBFxV+1BWDYbdrwC586H02/s8Y9CSxQFuIi459A+eOzLULoFLl4Eky53u6K0ogAXEXdUbIffzYTDZXD5Mig61+2K0o4CXERS75MNzjjeAFc+B0NPdreeNKVvCUQktd5f4TxBJ6MvzHlR4d0FCnARSZ23HofHvwL5xzvhnX+82xWlNQW4iCSftbD6V/CX62D46XDV89BvoNtVpT2dAxeR5AqH4e//AWsehHGXwsUPgi/D7ap6BAW4iCRPsA6W/ytsXg6nfgvO/0/doJNACnARSY7ag7Dsa7DjH3DeT+G063WDToIpwEUk8Q7thd9fCmVbYOZimPgVtyvqkRTgIpJY5R/A72fC4QrnCTon6AadZFGAi0ji7F4Pf5gFGLjqORgy2e2KejR9myAiibHtBVj6z5DZD+a8oPBOAQW4iHTdm4/B41+FgiLdoJNCCnAR6Txr4dV7nMefjfwCXPVX6HuM21X1GjoHLiKdEw7D/8yDtQ/B+MtgxgO6QSfFFOAi0nHRN+hM/Y5znbdu0Ek5BbiIdMyhvfDna2Hnq3D+z5wbdMQVCnARiU/tAXhtIfzfgxCqh0v+GybMcruqXk0BLiJHV18L6x6GVxdATRWM+zKc/UNdadINKMBFJLZwCDYtg5d/Dgc+huPPgWm3wuBJblcmEQpwEWnOWtj2d1g5H0rfhUGTYMavYdRZblcmLSjARaTJR2tgxa3w0euQNwou/Q2MvVhXmHRTCnARgdL3YOXtsPWv0OcY+Kd7YPI3wOt3uzI5CgW4SG92YDe8/F+w8Q/g7wPn/Mh58EJGH7crkzgowEV6o+pKWH0PrFkMWDjlm/CFW6BPvtuVSQcowEV6kyPVsGaR84DhuoMw8atw9n9AzjC3K5NOaDfAjTHHAb8FjgXCwGJr7UJjTB6wDBgB7ARmWWurkleqiHRaKAhv/R5W3QGH9kDRBXDurTDwRLcrky6IpwceBG6x1r5hjOkHbDDGvAhcBay01t5hjJkHzAO+n7xSRaTDrIUtzzpfUFa8D0OnwKWPwPDT3K5MEqDdALfW7gH2ROYPGWO2AEOAGcBZkdWWAqtQgIt0HztehRW3wSfroWA0fOUx+Nw/6cHCPUiHzoEbY0YAJwFrgIGRcMdau8cYo0GARbqDvW/DivnwwYvQbzB86T6YeAV49ZVXTxP3J2qM6Qv8GbjJWnvQxPmvuDFmLjAXYNgwfVEikjRVO53b3jc9AYH+cN7tMGUu+LPcrkySJK4AN8b4ccL7MWvtU5HmfcaYQZHe9yCgNNa21trFwGKAkpISm4CaRSTa4XL4x92wbgl4vHD6jXDGTZCV63ZlkmTxXIVigCXAFmvtPVGLngGuBO6ITJ9OSoUiElvdZ/D6/fC/90H9YThpNpw5DwYMcbsySZF4euCnA18H3jbGvBVp+w+c4H7CGDMH+Ai4LCkVikhzwSPwxlJ45U44XAafuwim/QQKR7tdmaRYPFehrAbaOuE9LbHliEibwmHY/BS89FPnfPfwM+Crj8Nxn3e7MnGJvpYWSQfbX4IXb4W9m2DgOPjan+CEc3VJYC+nABfpzj55w7mWe8crMGAYzFzsPAFew7sKCnAR94XDcPATKN8K5e9DWWRavg0Ol0J2Pky/A0quAV+m29VKN6IAF0mVYB1UbHeCufz9SGBH5uurm9YL5DhfSBafDwPHw6QrnOu6RVpQgIskWs3+SDBvi+pNb3W+eLThpvUGDIOCIjj5dGdaMBoKiqFPgc5tS1wU4CKdYa3zMISGoG7oSZdtdU57NPBmQP4JcOx4GHepE9CFxU6bHpogXaQAFzmaYB1Uftj8vHT5Vij/wLl5pkFggNODLj7fCemC0U6vOneEc3ekSBIowEWshdr9Tig3nJcui/Sqq3aCDTWtO+A4J6Ann+YEdGHDaY9CnfaQlFOAS3oJBZ2e75GG12ct5qtjtMda77DzxWHD++hz094MyDsejh0H4y5p6k0XFOm0h3QrCnBJLmudkKyphOoK5wu+o4VqzJCNWhasjf/YHh9k9I28+kBGtjPff3DkfZ+mZYEBznnpgmLIGa6hVyUt6L9SiV9DGFdXNAVydWXkVdF2e6iu/X37+0SFauQV6A/9B0UFcJ/W8/7sGO2R976M5P9MRFykAO+trHV6ttFhWxMVxM1CuappPnSkjR0aZ/jS7HznlTMMBk9y5rPymtqzcqLCNjL1Z+vOQpFOUIB3hbUQDjnnT23DNOoVDrdua7aujVo3xvbWtrHfGNu3rCFY10YoVzb1lNsKY+NpCuOsPOeUwuCTIDuvdSA3tAUG6GoLkRTr+QEeDjWdS62vdr7kavjyqvH9Yaivad12pNppb5xvuV118ysUuqPoMM7Ody5rGzK5efg2C+U8505A9YhFur30CPBdr8O+d5pfOVBfEzuIW4ZuPOdfoxlv5Nf6rKbzq/5s5wuwPoXO1J8VOWebDb6AE5LG4/RAG+bbezVb10TNx9iHp639eGNsH9m3x68wFunh0iPA3/kTrHu46b0vKxKkfZoHat+BrUPXnx013yf2dg3rZfRxLiHT9bwikgbSI8DP/iGc+f2mMFaPUkQkTQI8O8/tCkREuh11ZUVE0pQCXEQkTSnARUTSlAJcRCRNKcBFRNKUAlxEJE0pwEVE0pQCXEQkTSnARUTSlAJcRCRNKcBFRJLs4JGDSdmvAlxEJElqgjUs2riIc588lzdL30z4/tNjMCsRkTQStmGe+/A5Fr6xkNLqUs4bfh4FWQUJP067AW6MeQS4CCi11o6LtOUBy4ARwE5glrW2KuHViYikmXV713H3urvZUrmFE/NP5K4v3sXJA09OyrHiOYXyKDC9Rds8YKW1tghYGXkvItJr7Tq4i5tevolr/n4NlbWV/PyMn/OHf/pD0sIb4uiBW2v/YYwZ0aJ5BnBWZH4psAr4fiILExFJBwfqDrBo4yL+uPWP+D1+rj/per4+9utk+bKSfuzOngMfaK3dA2Ct3WOMOaatFY0xc4G5AMOGDevk4UREupf6UD3Lti7jwY0PcujIIS4puoTvnPSdpJzrbkvSv8S01i4GFgOUlJTYZB9PRCSZrLW8/PHL3LPhHnYd3MWpg07l30v+ndF5o1NeS2cDfJ8xZlCk9z0IKE1kUSIi3dG7Fe9y97q7Wb9vPSMHjOT+affzhSFfwLj0IPTOBvgzwJXAHZHp0wmrSESkm9l3eB/3vnkvz25/lpzMHH54yg/5cvGX8Xv8rtYVz2WEj+N8YVlgjNkN3IoT3E8YY+YAHwGXJbNIERE3VNdX8+jmR/nNO78hZENcdeJVXDvhWvpn9He7NCC+q1Aub2PRtATXIiLSLYTCIZ7Z/gz3vXkfZTVlXDDiAm6afBND+w11u7RmdCemiEiUNXvWsGD9At6rfI/xBeO556x7mHTMJLfLikkBLiIC7Diwg3s23MOqj1cxqM8g7vzCnUwfOR2P6b5DRinARaRX21+7n0WbFrHsvWVk+jK5cfKNzB4zm4Av4HZp7VKAi0ivdCR0hMffe5yHNj3E4frDfLnoy3xr0rdSeiNOVynARaRXsday8qOV3LPhHj4+9DGnDz6dW0puoSi3yO3SOkwBLiK9xubyzdy17i7eKH2DE3JO4MFzH+SMIWe4XVanKcBFpMfbe3gvC99YyHMfPkdeII8fn/pjLim6BJ8nvSMwvasXETmK6vpqlryzhKWbl2KtZc64OVw7/lr6ZvR1u7SEUICLSI8TCod4evvT3PfmfZTXlHPhyAu5cfKNDOk7xO3SEkoBLiI9yuufvs6C9QvYVrWNiYUT+dXZv2Ji4US3y0oKBbiIpLWwDbPjwA42lW3ihV0vsPqT1QzpO4S7z7ybC4Zf4NpIgamgABeRtHKg7gCbyjaxqXwTm8o28XbZ2xyqPwRATmYO/3byv/G1MV8j05vpcqXJpwAXkW4rGA6yff92NpZtZGPZRjaVbWLnwZ0AeIyHopwipo+czoTCCUwsnMjw/sO79a3viaYAF5Fuo6KmgrfL324M67fL36YmWANAXiCPCQUTmHHCDCYUTODEghPp4+/jcsXuUoCLiCvqw/Vsq9zmhHX5JjaWbmT3Z7sB8BkfxXnFXHzCxY2966F9h/bo89mdoQAXkZQorS5lU9mmxt715orN1IXqACjMKmRi4URmjZ7FxMKJjMkfk5Knuqc7BbiIJNyR0BHerXi38cvGjWUb2Xt4LwB+j58x+WOYNXqW07sumMixfY5V77oTFOAi0iXWWvYc3tOsd72lcgv14XoABvcZzKTCSUwY65wK+Vze58jwZrhcdc+gABeRuFhrOVx/mKraKvZW7+Xt8redHnbZJspqygAIeAOMzR/L7LGzmVgwkfGF4zkm+xiXK++5FOAivVQoHGJ/3X6qaquoqqtypu3MN/SqGxzX7zhOGXQKEwonMKFwAsW5xa4/qb03UYCL9BC1wVqqaquorKtkf+1+KmsrqaqtYn9djPm6Kg7WHcRiY+6rn78fuYFccgI5DOoziLH5Y8kJ5JCXmUduIJf8rHzG5o8lL5CX4j+lRFOAi3QzYRumJlhDdX21c8qijR5xQ1A3tDdcL92S13jJycwhN5BLbiCX4tzixvnczFzyAnnkBHKa5jNz8HvVi04HCnCRTrLWciR8hOr66sbArQ5GXvVN05pgDdXBamrqa9pc1tBWE6xpM4gbZPmyyM3MbQzhUQNGNQvk3EBTEOcGcumX0a9X3Z3YmyjApduy1hKyIecVdqZhGyYYDhK24WbLgjZIOBxutX6sbRrmo7cJhoONARodsC3DtXE+EsYhG4r7zxPwBsj2Z5PlyyLbn022z5nPC+Q1vo9uz/Y77xvDOjJNh4ftSmoowCVp6sP17Dqwi61VW9lWtY2tVVv55NAnBMPBZkHbGKY23Cp43eAzPrL8Wc0CNdufTWFWIVn9slqHbGR5lq/1Ng3rZfmy8Hq8rvx5pOdSgEtCVNVWOUFd6QT1+1Xv88H+DxqvWvB5fIwaMIqi3CIyvBl4jdd5ebxxz3uMB5/H12zeYzzN1vOZSJvn6PuM3pfXePF5fI2Bq/O/ki4U4NIh9eF6dh7Y2dij3la1jW2V2xqvAwYoyCqgOLeY2WNmU5RbxOi80YzsP1LBKJJgCnBpU2VtpRPUlZGgrtrG9v3bm/Wqjx9wPFMHT6U4t7jxlZ+V73LlIr2DAlwae9XRPeptVa171aNzRzN1zFSK85ygHjlgpG7aEGmHtZYjoTBeY/B5E3s1kAK8l6msrWzWo27Zq/Z7/Byfo1619GzhsKU2GKK2PkxtfYia+hC19U3vG+ab2psvr2mYD4aoPRJq3FdNZL6uxbZhC7+9ZgpfLC5M6J9DAd5D1Yfr2XFgR7Me9daqrZTXlDeuU5hVSHFuMVPHOmE9Onc0IwaMUK9aYrLWEgpbgpFXKGQJhsONbU3TsLNOyBK2UctCDeu0sU3Itrkv51gx2pvV4uy7WXgGw1EBG4oEbJgjwc5d4eQxkOX3Emh8eRrns/xecrP9ZPq9BHxesjI8BHyRZRlehudnJ/gT6WKAG2OmAwsBL/CwtfaOhFTVwtLNS1n50cp217M29m3BzdZp49bhzq6Hdda11tL4P2tjtjXU2Kotxjbg3JHXrK3hWC3Wi3XsmmANwXAQaOpVnzb4NCeo80ZTnFus26BTxFpLfchSH3JC6kgoTDAcpj5oqQ+Hm7dH1nNelmAoTH3YmQZDzvoN6wQj7fWR4GtY1nqbyHzUtL7lssi+G4K2vsV6wbBzHLf5PAavxzRNvR68HoPXNLw3TmhmeAn4PORk+cnqH2gWtNHBm9UihAN+Z7usjIZ5L4EMT+O832u61bC3nQ5wY4wXuB84D9gNrDPGPGOtfTdRxTXweXxxDz9paP+HG886QNwflMHg/N/gMR5M5H8NbQbnQ2+YNmzT2Ba9blRb9DbR04baotdruc8sXxZFuUUU5xb3mF51ONwQfpb6YDgSfg0hFm4Myej5NoMx7PTCmm0f2W+w4Tgt9tlqX43rO+sdiZqP3iYYTn7weQz4vB78kVDzew0+jwef1+D3ehoDz++NtHk8ZPg8ZDdu42zn8zjb+b2Rtsb5pn07+2naf1OgemIEbBvtHk/U8hjtHoPX27zdY+L/O9lbdKUHPgX4wFr7IYAx5o/ADCDhAZ5ZfSb9qk5M9G5dYVtMk3Yca9kJvMhnwDvNjtfyF5WWtbT8TaZVrTZ6tsW6Lffd4n3Dr9Qtg7YpcGOHZn0oTLJzMMPbFHh+b1TYeT34PR78PidIMrxO+PVptl5kPno9nxNc0fvzx9om0u7zGqcGj8Hvc47pHL91GDcLaY/B41Gw9UZdCfAhwMdR73cDp7RcyRgzF5gLMGzYsE4d6KPKajbsqurUtslmsXH36FOtZWfFNFtm2lwWq6Hl8ujtWy9rua1ptiw6GAN+D/0CvubB5vGQ4Wvo/bUO09hB6yGjocfoc3qLfp+nMfCah2lTr7JhXz5P9/rVWCQeXQnwWP+1t+6sWbsYWAxQUlLSqT7UzecVc/N5xZ3ZVESkx+rKRYm7geOi3g8FPu1aOSIiEq+uBPg6oMgYM9IYkwF8FXgmMWWJiEh7On0KxVobNMZ8B/g7zmWEj1hrNyesMhEROaouXQdurX0eeD5BtYiISAfoMR0iImlKAS4ikqYU4CIiaUoBLiKSpkw8A0Al7GDGlAG7Orn5AOBAAstJ1H47un2868ez3tHW6cyyAqA8Rrvb9NknZrk+98Ts143Pfbi1tvVYtNbatHgBi7vjfju6fbzrx7Pe0dbpzDJgvdufsz779tfr7HJ97un9ucd6pdMplGe76X47un2868ez3tHW6eyy7kiffWKW63NPzH7d/DvfTEpPoUj3ZoxZb60tcbsOSS197ukrnXrgknyL3S5AXKHPPU2pBy4ikqbUAxcRSVMKcBGRNKUAFxFJUwpwickYM8oYs8QY8ye3a5HUMsZcbIz5b2PM08aY892uR9qmAO9FjDGPGGNKjTHvtGifbozZaoz5wBgzD8Ba+6G1do47lUqidfCz/4u19l+Aq4CvuFCuxEkB3rs8CkyPbjDGeIH7gQuBscDlxpixqS9NkuxROv7Z/yiyXLopBXgvYq39B1DZonkK8EGkx30E+CMwI+XFSVJ15LM3jjuBv1lr30h1rRI/BbgMAT6Oer8bGGKMyTfGLAJOMsb8wJ3SJMlifvbA9cC5wKXGmOvcKEzi06VHqkmPYGK0WWttBaC/vD1bW5/9vcC9qS5GOk49cNkNHBf1fijwqUu1SGrps09zCnBZBxQZY0YaYzKArwLPuFyTpIY++zSnAO9FjDGPA68Do40xu40xc6y1QeA7wN+BLcAT1trNbtYpiafPvmfSYFYiImlKPXARkTSlABcRSVMKcBGRNKUAFxFJUwpwEZE0pQAXEUlTCnARkTSlABcRSVMKcBGRNPX/AUDkzSu8GTPfAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def testFeatureCount():\n", " global n_features\n", " global data\n", " q = 2 * len(data)\n", " n_features = 2\n", " results = []\n", " while n_features < 1000:\n", " data = np.array([randomPoint() for _i in range(numPoints)])\n", " results.append((n_features, testNNSearchByQueries(q)))\n", " n_features *= 2\n", " showResults(results)\n", " \n", "n_features = 100\n", "numPoints = 2000\n", "maxValue = 5000\n", "nbhSize = 5\n", "\n", "testFeatureCount()" ] }, { "cell_type": "code", "execution_count": 16, "id": "fb158f8c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- #points: 100\n", "\n", "#Queries: 40000\n", "NNSearch - c library: #1 0.0069s\n", "NNSearch - brute force: #1 0.1825s\n", "NN_fit_cLib_init: #1 0.0002s\n", "NN_fit_cLib_call: #1 0.0007s\n", "NN_fit_cLib_list: #1 0.0000s\n", "NN_fit_bfnp_init: #1 0.0003s\n", "NN_fit_bfnp_loop: #1 0.1768s\n", "NN_fit_bfnp_dist: #100 0.1398s\n", "NN_fit_bfnp_insert: #4950 0.0254s\n", "NN_fit_bfnp_toList: #100 0.0003s\n", "NNSearch - chained: #1 0.0298s\n", "NN_fit_chained_init: #1 0.0003s\n", "NN_fit_chained_toList: #1 0.0240s\n", "-- #points: 200\n", "\n", "#Queries: 40000\n", "NNSearch - c library: #1 0.0078s\n", "NNSearch - brute force: #1 0.4038s\n", "NN_fit_cLib_init: #1 0.0004s\n", "NN_fit_cLib_call: #1 0.0020s\n", "NN_fit_cLib_list: #1 0.0000s\n", "NN_fit_bfnp_init: #1 0.0003s\n", "NN_fit_bfnp_loop: #1 0.3983s\n", "NN_fit_bfnp_dist: #200 0.2742s\n", "NN_fit_bfnp_insert: #19900 0.0833s\n", "NN_fit_bfnp_toList: #200 0.0006s\n", "NNSearch - chained: #1 0.2098s\n", "NN_fit_chained_init: #1 0.0005s\n", "NN_fit_chained_toList: #1 0.1867s\n", "-- #points: 400\n", "\n", "#Queries: 40000\n", "NNSearch - c library: #1 0.0566s\n", "NNSearch - brute force: #1 1.5731s\n", "NN_fit_cLib_init: #1 0.0020s\n", "NN_fit_cLib_call: #1 0.0316s\n", "NN_fit_cLib_list: #1 0.0002s\n", "NN_fit_bfnp_init: #1 0.0028s\n", "NN_fit_bfnp_loop: #1 1.5649s\n", "NN_fit_bfnp_dist: #400 0.7911s\n", "NN_fit_bfnp_insert: #79800 0.5328s\n", "NN_fit_bfnp_toList: #400 0.0016s\n", "NNSearch - chained: #1 0.4370s\n", "NN_fit_chained_init: #1 0.0004s\n", "NN_fit_chained_toList: #1 0.4140s\n", "-- #points: 800\n", "\n", "#Queries: 40000\n", "NNSearch - c library: #1 0.1498s\n", "NNSearch - brute force: #1 3.8867s\n", "NN_fit_cLib_init: #1 0.0036s\n", "NN_fit_cLib_call: #1 0.1231s\n", "NN_fit_cLib_list: #1 0.0003s\n", "NN_fit_bfnp_init: #1 0.0047s\n", "NN_fit_bfnp_loop: #1 3.8761s\n", "NN_fit_bfnp_dist: #800 1.5990s\n", "NN_fit_bfnp_insert: #319600 1.5572s\n", "NN_fit_bfnp_toList: #800 0.0032s\n", "NNSearch - chained: #1 0.9900s\n", "NN_fit_chained_init: #1 0.0010s\n", "NN_fit_chained_toList: #1 0.9644s\n", "-- #points: 1600\n", "\n", "#Queries: 40000\n", "NNSearch - c library: #1 0.5185s\n", "NNSearch - brute force: #1 12.3452s\n", "NN_fit_cLib_init: #1 0.0069s\n", "NN_fit_cLib_call: #1 0.4882s\n", "NN_fit_cLib_list: #1 0.0008s\n", "NN_fit_bfnp_init: #1 0.0086s\n", "NN_fit_bfnp_loop: #1 12.3302s\n", "NN_fit_bfnp_dist: #1600 4.3925s\n", "NN_fit_bfnp_insert: #1279200 5.3863s\n", "NN_fit_bfnp_toList: #1600 0.0061s\n", "NNSearch - chained: #1 2.4873s\n", "NN_fit_chained_init: #1 0.0010s\n", "NN_fit_chained_toList: #1 2.4631s\n", "-- #points: 3200\n", "\n", "#Queries: 40000\n", "NNSearch - c library: #1 0.7781s\n", "NNSearch - brute force: #1 54.4928s\n", "NN_fit_cLib_init: #1 0.0128s\n", "NN_fit_cLib_call: #1 0.7592s\n", "NN_fit_cLib_list: #1 0.0004s\n", "NN_fit_bfnp_init: #1 0.0043s\n", "NN_fit_bfnp_loop: #1 54.4820s\n", "NN_fit_bfnp_dist: #3200 22.8180s\n", "NN_fit_bfnp_insert: #5118400 21.6833s\n", "NN_fit_bfnp_toList: #3200 0.0135s\n", "NNSearch - chained: #1 7.0006s\n", "NN_fit_chained_init: #1 0.0008s\n", "NN_fit_chained_toList: #1 6.9751s\n", "-- #points: 6400\n", "\n", "#Queries: 40000\n", "NNSearch - c library: #1 1.9427s\n", "NNSearch - brute force: #1 213.7632s\n", "NN_fit_cLib_init: #1 0.0251s\n", "NN_fit_cLib_call: #1 1.9112s\n", "NN_fit_cLib_list: #1 0.0007s\n", "NN_fit_bfnp_init: #1 0.0099s\n", "NN_fit_bfnp_loop: #1 213.7460s\n", "NN_fit_bfnp_dist: #6400 86.5082s\n", "NN_fit_bfnp_insert: #20476800 87.1325s\n", "NN_fit_bfnp_toList: #6400 0.0310s\n", "NNSearch - chained: #1 22.1463s\n", "NN_fit_chained_init: #1 0.0012s\n", "NN_fit_chained_toList: #1 22.1184s\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def testPointCount():\n", " global numPoints\n", " global data\n", " q = 40000\n", " numPoints = 100\n", " results = []\n", " while numPoints < 10000:\n", " print(f\"-- #points: {numPoints}\")\n", " data = np.array([randomPoint() for _i in range(numPoints)])\n", " results.append((numPoints, testNNSearchByQueries(q)))\n", " numPoints *= 2\n", " showResults(results)\n", " \n", "n_features = 100\n", "numPoints = 2000\n", "maxValue = 5000\n", "nbhSize = 5\n", "\n", "testPointCount()" ] }, { "cell_type": "code", "execution_count": 17, "id": "2332a58c", "metadata": {}, "outputs": [], "source": [ "a = np.array([[1,2,3],[4,5,6]])\n", "b = np.array([[1,4],[2,5],[3,6]])" ] }, { "cell_type": "code", "execution_count": 18, "id": "9b1ae45a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test: #1 0.0006s\n" ] } ], "source": [ "t = timing(\"test\")\n", "t.start()\n", "for d in data:\n", " #np.matmul(data - d, data[0])\n", " pass\n", "t.stop()\n", "print(t)" ] }, { "cell_type": "code", "execution_count": 19, "id": "b6d70eab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 4],\n", " [2, 5],\n", " [3, 6]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.transpose(a)" ] }, { "cell_type": "code", "execution_count": 20, "id": "05c918c4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test: #1 0.0170s\n" ] } ], "source": [ "t = timing(\"test\")\n", "t.start()\n", "w = np.array(np.repeat([data[0]], len(data), axis=0))\n", "d = tf.keras.layers.Subtract()([w, data])\n", "r = tf.keras.layers.Dot(axes=(1,1))([d,d]).numpy()\n", "t.stop()\n", "print(t)" ] }, { "cell_type": "code", "execution_count": 21, "id": "c25c1615", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6400, 1)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r.shape" ] } ], "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.7" } }, "nbformat": 4, "nbformat_minor": 5 }