{
"cells": [
{
"cell_type": "code",
"execution_count": 91,
"id": "54634e7b",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from numba import jit\n",
"import itertools\n",
"\n",
"fontsize=14"
]
},
{
"cell_type": "markdown",
"id": "8e090825",
"metadata": {},
"source": [
"__В pdf-файле задачи 1-4__"
]
},
{
"cell_type": "code",
"execution_count": 374,
"id": "705fbec9",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 374,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import IFrame\n",
"IFrame(\"HW1_14.pdf\", width=1000, height=800)"
]
},
{
"cell_type": "markdown",
"id": "d4960afd",
"metadata": {},
"source": [
"### Задача 5 \n",
"\n",
"- сгенерируем s точек равномерно в квадрате стороной 2, оставим только те, для которых $|| x ||_p \\le 1, p=1,2,3$\n",
"- сравним реализацию с jit и без"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "55fc75ad",
"metadata": {},
"outputs": [],
"source": [
"@jit(nopython=True)\n",
"def numba_unit_disk(p=1, s=100000):\n",
" X_old, Y_old = np.random.uniform(-1.0, 1.0, s), np.random.uniform(-1.0, 1.0, s)\n",
" X_new, Y_new = [], []\n",
" \n",
" for x, y in zip(X_old, Y_old):\n",
" if (abs(x)**p + abs(y)**p)**(1/p) <= 1:\n",
" X_new.append(x)\n",
" Y_new.append(y)\n",
" return X_new, Y_new\n",
"\n",
"def unit_disk(p=1, s=100000):\n",
" X_old, Y_old = np.random.uniform(-1.0, 1.0, s), np.random.uniform(-1.0, 1.0, s)\n",
" \n",
" X_new, Y_new = [], []\n",
" for x, y in zip(X_old, Y_old):\n",
" if np.linalg.norm([x, y], ord=p) <= 1:\n",
" X_new.append(x)\n",
" Y_new.append(y)\n",
" return X_new, Y_new"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "108af16e",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"