diff --git "a/4 \320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270 Python \320\264\320\273\321\217 Data Science/dz4/matplotlib.ipynb" "b/4 \320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270 Python \320\264\320\273\321\217 Data Science/dz4/matplotlib.ipynb" new file mode 100644 index 0000000..d8f755d --- /dev/null +++ "b/4 \320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270 Python \320\264\320\273\321\217 Data Science/dz4/matplotlib.ipynb" @@ -0,0 +1,779 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Тема “Визуализация данных в Matplotlib”\n", + "\n", + "## Задание 1\n", + "Загрузите модуль pyplot библиотеки matplotlib с псевдонимом plt, а также библиотеку numpy с псевдонимом np.\n", + "\n", + "Примените магическую функцию %matplotlib inline для отображения графиков в Jupyter Notebook и настройки конфигурации ноутбука со значением 'svg' для более четкого отображения графиков.\n", + "\n", + "Создайте список под названием x с числами 1, 2, 3, 4, 5, 6, 7 и список y с числами 3.5, 3.8, 4.2, 4.5, 5, 5.5, 7.\n", + "\n", + "С помощью функции plot постройте график, соединяющий линиями точки с горизонтальными координатами из списка x и вертикальными - из списка y.\n", + "\n", + "Затем в следующей ячейке постройте диаграмму рассеяния (другие названия - диаграмма разброса, scatter plot).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format = 'svg'" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-18T19:41:10.180609\n image/svg+xml\n \n \n Matplotlib v3.5.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = [1, 2, 3, 4, 5, 6, 7]\n", + "y = [3.5, 3.8, 4.2, 4.5, 5, 5.5, 7]\n", + "plt.plot(x, y, color='red')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-18T19:41:10.298093\n image/svg+xml\n \n \n Matplotlib v3.5.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(x, y, color='orange')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Задание 2\n", + "С помощью функции linspace из библиотеки Numpy создайте массив t из 51 числа от 0 до 10 включительно.\n", + "\n", + "Создайте массив Numpy под названием f, содержащий косинусы элементов массива t.\n", + "\n", + "Постройте линейную диаграмму, используя массив t для координат по горизонтали,а массив f - для координат по вертикали. Линия графика должна быть зеленого цвета.\n", + "\n", + "Выведите название диаграммы - 'График f(t)'. Также добавьте названия для горизонтальной оси - 'Значения t' и для вертикальной - 'Значения f'.\n", + "\n", + "Ограничьте график по оси x значениями 0.5 и 9.5, а по оси y - значениями -2.5 и 2.5.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Мне показалось интересней потренироваться работать через объекты\n", + "# Поэтому реализация через них\n", + "t = np.linspace(0, 10, 51)\n", + "f = np.cos(t)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-18T19:41:10.416971\n image/svg+xml\n \n \n Matplotlib v3.5.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t, f, color = 'green')\n", + "plt.title('График f(t)')\n", + "plt.xlabel('Значения t')\n", + "plt.ylabel('Значения f')\n", + "plt.axis([0.5, 9.5, -2.5, 2.5])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## *Задание 3\n", + "С помощью функции linspace библиотеки Numpy создайте массив x из 51 числа от -3 до 3 включительно.\n", + "\n", + "Создайте массивы y1, y2, y3, y4 по следующим формулам:\n", + "\n", + "y1 = x**2 \n", + "y2 = 2 * x + 0.5 \n", + "y3 = -3 * x - 1.5 \n", + "y4 = sin(x) \n", + "\n", + "Используя функцию subplots модуля matplotlib.pyplot, создайте объект matplotlib.figure.Figure с названием fig и массив объектов Axes под названием ax,причем так, чтобы у вас было 4 отдельных графика в сетке, состоящей из двух строк и двух столбцов. \n", + "\n", + "В каждом графике массив x используется для координат по горизонтали.В левом верхнем графике для координат по вертикали используйте y1,в правом верхнем - y2, в левом нижнем - y3, в правом нижнем - y4. \n", + "Дайте название графикам: 'График y1', 'График y2' и т.д.\n", + "\n", + "Для графика в левом верхнем углу установите границы по оси x от -5 до 5.\n", + "\n", + "Установите размеры фигуры 8 дюймов по горизонтали и 6 дюймов по вертикали.\n", + "\n", + "Вертикальные и горизонтальные зазоры между графиками должны составлять 0.3.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.linspace(-3, 3, 51)\n", + "y1 = x**2 \n", + "y2 = 2 * x + 0.5 \n", + "y3 = -3 * x - 1.5 \n", + "y4 = np.sin(x) " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-18T19:41:10.602130\n image/svg+xml\n \n \n Matplotlib v3.5.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(nrows=2, ncols = 2,\n", + " figsize = (8, 6))\n", + "fig.subplots_adjust(wspace=0.3, hspace=0.3)\n", + "ax[0][0].plot(x, y1)\n", + "ax[0][0].set(\n", + " title = 'График y1',\n", + " xlim = (-5, 5)\n", + ")\n", + "\n", + "ax[0][1].plot(x, y2)\n", + "ax[0][1].set_title('График y2')\n", + "\n", + "ax[1][0].plot(x, y3)\n", + "ax[1][0].set_title('График y3')\n", + "\n", + "ax[1][1].plot(x, y4)\n", + "ax[1][1].set_title('График y4')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## *Задание 4\n", + "В этом задании мы будем работать с датасетом, в котором приведены данные по мошенничеству с кредитными данными: Credit Card Fraud Detection (информация об авторах: Andrea Dal Pozzolo, Olivier Caelen, Reid A. Johnson and Gianluca Bontempi. Calibrating Probability with Undersampling for Unbalanced Classification. In Symposium on Computational Intelligence and Data Mining (CIDM), IEEE, 2015).\n", + "\n", + "Ознакомьтесь с описанием и скачайте датасет creditcard.csv с сайта Kaggle.com по ссылке:\n", + "Credit Card Fraud Detection\n", + "\n", + "Данный датасет является примером несбалансированных данных, так как мошеннические операции с картами встречаются реже обычных.\n", + "\n", + "Импортируйте библиотеку Pandas, а также используйте для графиков стиль “fivethirtyeight”.\n", + "\n", + "Посчитайте с помощью метода value_counts количество наблюдений для каждого значения целевой переменной Class и примените к полученным данным метод plot, чтобы построить столбчатую диаграмму.\n", + "\n", + "Затем постройте такую же диаграмму, используя логарифмический масштаб.\n", + "\n", + "На следующем графике постройте две гистограммы по значениям признака V1 - одну для мошеннических транзакций (Class равен 1) и другую - для обычных (Class равен 0). \n", + "Подберите значение аргумента density так, чтобы по вертикали графика было расположено не число наблюдений, а плотность распределения. \n", + "Число бинов должно равняться 20 для обеих гистограмм, а коэффициент alpha сделайте равным 0.5, чтобы гистограммы были полупрозрачными и не загораживали друг друга. \n", + "Создайте легенду с двумя значениями: “Class 0” и “Class 1”. \n", + "Гистограмма обычных транзакций должна быть серого цвета, а мошеннических - красного. \n", + "Горизонтальной оси дайте название “V1”. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
00.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620
10.01.1918570.2661510.1664800.4481540.060018-0.082361-0.0788030.085102-0.255425...-0.225775-0.6386720.101288-0.3398460.1671700.125895-0.0089830.0147242.690
21.0-1.358354-1.3401631.7732090.379780-0.5031981.8004990.7914610.247676-1.514654...0.2479980.7716790.909412-0.689281-0.327642-0.139097-0.055353-0.059752378.660
31.0-0.966272-0.1852261.792993-0.863291-0.0103091.2472030.2376090.377436-1.387024...-0.1083000.005274-0.190321-1.1755750.647376-0.2219290.0627230.061458123.500
42.0-1.1582330.8777371.5487180.403034-0.4071930.0959210.592941-0.2705330.817739...-0.0094310.798278-0.1374580.141267-0.2060100.5022920.2194220.21515369.990
..................................................................
284802172786.0-11.88111810.071785-9.834783-2.066656-5.364473-2.606837-4.9182157.3053341.914428...0.2134540.1118641.014480-0.5093481.4368070.2500340.9436510.8237310.770
284803172787.0-0.732789-0.0550802.035030-0.7385890.8682291.0584150.0243300.2948690.584800...0.2142050.9243840.012463-1.016226-0.606624-0.3952550.068472-0.05352724.790
284804172788.01.919565-0.301254-3.249640-0.5578282.6305153.031260-0.2968270.7084170.432454...0.2320450.578229-0.0375010.6401340.265745-0.0873710.004455-0.02656167.880
284805172788.0-0.2404400.5304830.7025100.689799-0.3779610.623708-0.6861800.6791450.392087...0.2652450.800049-0.1632980.123205-0.5691590.5466680.1088210.10453310.000
284806172792.0-0.533413-0.1897330.703337-0.506271-0.012546-0.6496171.577006-0.4146500.486180...0.2610570.6430780.3767770.008797-0.473649-0.818267-0.0024150.013649217.000
\n", + "

284807 rows × 31 columns

\n", + "
" + ], + "text/plain": [ + " Time V1 V2 V3 V4 V5 \\\n", + "0 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 \n", + "1 0.0 1.191857 0.266151 0.166480 0.448154 0.060018 \n", + "2 1.0 -1.358354 -1.340163 1.773209 0.379780 -0.503198 \n", + "3 1.0 -0.966272 -0.185226 1.792993 -0.863291 -0.010309 \n", + "4 2.0 -1.158233 0.877737 1.548718 0.403034 -0.407193 \n", + "... ... ... ... ... ... ... \n", + "284802 172786.0 -11.881118 10.071785 -9.834783 -2.066656 -5.364473 \n", + "284803 172787.0 -0.732789 -0.055080 2.035030 -0.738589 0.868229 \n", + "284804 172788.0 1.919565 -0.301254 -3.249640 -0.557828 2.630515 \n", + "284805 172788.0 -0.240440 0.530483 0.702510 0.689799 -0.377961 \n", + "284806 172792.0 -0.533413 -0.189733 0.703337 -0.506271 -0.012546 \n", + "\n", + " V6 V7 V8 V9 ... V21 V22 \\\n", + "0 0.462388 0.239599 0.098698 0.363787 ... -0.018307 0.277838 \n", + "1 -0.082361 -0.078803 0.085102 -0.255425 ... -0.225775 -0.638672 \n", + "2 1.800499 0.791461 0.247676 -1.514654 ... 0.247998 0.771679 \n", + "3 1.247203 0.237609 0.377436 -1.387024 ... -0.108300 0.005274 \n", + "4 0.095921 0.592941 -0.270533 0.817739 ... -0.009431 0.798278 \n", + "... ... ... ... ... ... ... ... \n", + "284802 -2.606837 -4.918215 7.305334 1.914428 ... 0.213454 0.111864 \n", + "284803 1.058415 0.024330 0.294869 0.584800 ... 0.214205 0.924384 \n", + "284804 3.031260 -0.296827 0.708417 0.432454 ... 0.232045 0.578229 \n", + "284805 0.623708 -0.686180 0.679145 0.392087 ... 0.265245 0.800049 \n", + "284806 -0.649617 1.577006 -0.414650 0.486180 ... 0.261057 0.643078 \n", + "\n", + " V23 V24 V25 V26 V27 V28 Amount \\\n", + "0 -0.110474 0.066928 0.128539 -0.189115 0.133558 -0.021053 149.62 \n", + "1 0.101288 -0.339846 0.167170 0.125895 -0.008983 0.014724 2.69 \n", + "2 0.909412 -0.689281 -0.327642 -0.139097 -0.055353 -0.059752 378.66 \n", + "3 -0.190321 -1.175575 0.647376 -0.221929 0.062723 0.061458 123.50 \n", + "4 -0.137458 0.141267 -0.206010 0.502292 0.219422 0.215153 69.99 \n", + "... ... ... ... ... ... ... ... \n", + "284802 1.014480 -0.509348 1.436807 0.250034 0.943651 0.823731 0.77 \n", + "284803 0.012463 -1.016226 -0.606624 -0.395255 0.068472 -0.053527 24.79 \n", + "284804 -0.037501 0.640134 0.265745 -0.087371 0.004455 -0.026561 67.88 \n", + "284805 -0.163298 0.123205 -0.569159 0.546668 0.108821 0.104533 10.00 \n", + "284806 0.376777 0.008797 -0.473649 -0.818267 -0.002415 0.013649 217.00 \n", + "\n", + " Class \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "284802 0 \n", + "284803 0 \n", + "284804 0 \n", + "284805 0 \n", + "284806 0 \n", + "\n", + "[284807 rows x 31 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "cc_pd = pd.read_csv('creditcard.csv')\n", + "cc_pd" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "plt.style.use('fivethirtyeight')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-18T19:41:12.146456\n image/svg+xml\n \n \n Matplotlib v3.5.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cc_pd['Class'].value_counts().plot(kind=\"bar\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-18T19:41:12.380499\n image/svg+xml\n \n \n Matplotlib v3.5.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cc_pd['Class'].value_counts().plot(kind=\"bar\", logy=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "cc_cheater = cc_pd[(cc_pd['Class'] == 1)]\n", + "cc_normal = cc_pd[(cc_pd['Class'] == 0)]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-18T19:41:12.523875\n image/svg+xml\n \n \n Matplotlib v3.5.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(cc_cheater['V1'], \n", + " bins = 20,\n", + " density = True,\n", + " alpha = 0.5,\n", + " color = 'red',\n", + " label = 'Class 1')\n", + "\n", + "plt.hist(cc_normal['V1'], \n", + " bins = 20,\n", + " density = True,\n", + " alpha = 0.5,\n", + " color = 'grey',\n", + " label = 'Class 0')\n", + "plt.legend(loc = 'best')\n", + "plt.xlabel('V1')\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "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.10.4" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git "a/4 \320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270 Python \320\264\320\273\321\217 Data Science/dz4/repetition.ipynb" "b/4 \320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270 Python \320\264\320\273\321\217 Data Science/dz4/repetition.ipynb" new file mode 100644 index 0000000..1581305 --- /dev/null +++ "b/4 \320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270 Python \320\264\320\273\321\217 Data Science/dz4/repetition.ipynb" @@ -0,0 +1,536 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Задание на повторение материала\n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Создать одномерный массив Numpy под названием a из 12 последовательных целых чисел чисел от 12 до 24 невключительно" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.arange(12, 24)\n", + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Создать 5 двумерных массивов разной формы из массива a. Не использовать в аргументах метода reshape число -1." + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[12],\n", + " [13],\n", + " [14],\n", + " [15],\n", + " [16],\n", + " [17],\n", + " [18],\n", + " [19],\n", + " [20],\n", + " [21],\n", + " [22],\n", + " [23]]),\n", + " array([[12, 13, 14, 15],\n", + " [16, 17, 18, 19],\n", + " [20, 21, 22, 23]]),\n", + " array([[12, 13, 14],\n", + " [15, 16, 17],\n", + " [18, 19, 20],\n", + " [21, 22, 23]]),\n", + " array([[12, 13, 14, 15, 16, 17],\n", + " [18, 19, 20, 21, 22, 23]]),\n", + " array([[12, 13],\n", + " [14, 15],\n", + " [16, 17],\n", + " [18, 19],\n", + " [20, 21],\n", + " [22, 23]]))" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a1 = a.reshape(12, 1)\n", + "a2 = a.reshape(3, 4)\n", + "a3 = a.reshape(4, 3)\n", + "a4 = a.reshape(2, 6)\n", + "a5 = a.reshape(6, 2)\n", + "a1, a2, a3, a4, a5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Создать 5 двумерных массивов разной формы из массива a. Использовать в аргументах метода reshape число -1 (в трех примерах - для обозначения числа столбцов, в двух - для строк)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[12],\n", + " [13],\n", + " [14],\n", + " [15],\n", + " [16],\n", + " [17],\n", + " [18],\n", + " [19],\n", + " [20],\n", + " [21],\n", + " [22],\n", + " [23]]),\n", + " array([[12, 13, 14, 15],\n", + " [16, 17, 18, 19],\n", + " [20, 21, 22, 23]]),\n", + " array([[12, 13, 14],\n", + " [15, 16, 17],\n", + " [18, 19, 20],\n", + " [21, 22, 23]]),\n", + " array([[12, 13, 14, 15, 16, 17],\n", + " [18, 19, 20, 21, 22, 23]]),\n", + " array([[12, 13],\n", + " [14, 15],\n", + " [16, 17],\n", + " [18, 19],\n", + " [20, 21],\n", + " [22, 23]]))" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a1 = a.reshape(12, -1)\n", + "a2 = a.reshape(3, -1)\n", + "a3 = a.reshape(-1, 3)\n", + "a4 = a.reshape(2, -1)\n", + "a5 = a.reshape(-1, 2)\n", + "a1, a2, a3, a4, a5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Можно ли массив Numpy, состоящий из одного столбца и 12 строк, назвать одномерным?" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[12],\n", + " [13],\n", + " [14],\n", + " [15],\n", + " [16],\n", + " [17],\n", + " [18],\n", + " [19],\n", + " [20],\n", + " [21],\n", + " [22],\n", + " [23]])" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Нет. Он будет двумерный из 12 строк.\n", + "# Каждый столбец будет так же списком\n", + "a1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Создать массив из 3 строк и 4 столбцов, состоящий из случайных чисел с плавающей запятой из нормального распределения со средним, равным 0 и среднеквадратичным отклонением, равным 1.0. Получить из этого массива одномерный массив с таким же атрибутом size, как и исходный массив.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[-0.46341769, -0.46572975, 0.24196227, -1.91328024],\n", + " [-1.72491783, -0.56228753, -1.01283112, 0.31424733],\n", + " [-0.90802408, -1.4123037 , 1.46564877, -0.2257763 ]]),\n", + " array([-0.46341769, -1.72491783, -0.90802408, -0.46572975, -0.56228753,\n", + " -1.4123037 , 0.24196227, -1.01283112, 1.46564877, -1.91328024,\n", + " 0.31424733, -0.2257763 ]))" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = np.random.normal(loc=0.0, scale=1.0, size=(3, 4)) #loc и scale можно было опустить. Это значения по умолчанию\n", + "x_f = x.flatten(order='F') # Сначала столбцы, потом строки\n", + "x, x_f" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. Создать массив a, состоящий из целых чисел, убывающих от 20 до 0 невключительно с интервалом 2." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([20, 18, 16, 14, 12, 10, 8, 6, 4, 2])" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.arange(20, 0, -2)\n", + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "7. Создать массив b, состоящий из 1 строки и 10 столбцов: целых чисел, убывающих от 20 до 1 невключительно с интервалом 2. В чем разница между массивами a и b?\n" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([20, 18, 16, 14, 12, 10, 8, 6, 4, 2])" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = np.arange(20, 1, -2)\n", + "b\n", + "# Тут я видимо не понял соль задания. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "8. Вертикально соединить массивы a и b. a - двумерный массив из нулей, число строк которого больше 1 и на 1 меньше, чем число строк двумерного массива b, состоящего из единиц. Итоговый массив v должен иметь атрибут size, равный 10.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[0., 0.],\n", + " [0., 0.],\n", + " [1., 1.],\n", + " [1., 1.],\n", + " [1., 1.]]),\n", + " 10)" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.zeros((2,2))\n", + "b = np.ones((3, 2))\n", + "c = np.vstack((a, b))\n", + "c, c.size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "9. Создать одномерный массив а, состоящий из последовательности целых чисел от 0 до 12. \n", + "Поменять форму этого массива, чтобы получилась матрица A (двумерный массив Numpy), состоящая из 4 строк и 3 столбцов. \n", + "Получить матрицу At путем транспонирования матрицы A. \n", + "Получить матрицу B, умножив матрицу A на матрицу At с помощью матричного умножения. \n", + "Какой размер имеет матрица B? \n", + "Получится ли вычислить обратную матрицу для матрицы B и почему? \n" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((4, 4), 1.705863559291837e-29)" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.arange(0, 12)\n", + "A = a.reshape(4, 3)\n", + "At = A.T\n", + "B = A.dot(At)\n", + "B.shape, np.linalg.det(B)\n", + "# Не существует обратной матрицы, т.к. определитель = 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "10. Инициализируйте генератор случайных числе с помощью объекта seed, равного 42.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(42)\n", + "# За выбор числа отдельное спасибо :)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "11. Создайте одномерный массив c, составленный из последовательности 16-ти случайных равномерно распределенных целых чисел от 0 до 16 невключительно. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 6, 3, 12, 14, 10, 7, 12, 4, 6, 9, 2, 6, 10, 10, 7, 4])" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = np.random.randint(0, 16, 16)\n", + "c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "12. Поменяйте его форму так, чтобы получилась квадратная матрица C. \n", + "Получите матрицу D, поэлементно прибавив матрицу B из предыдущего вопроса к матрице C, умноженной на 10. \n", + "Вычислите определитель, ранг и обратную матрицу D_inv для D.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-28512000.000000045,\n", + " 4,\n", + " array([[ 0.00935396, 0.04486532, 0.05897517, -0.07286055],\n", + " [-0.01503577, -0.00122896, -0.00192971, 0.00967873],\n", + " [-0.00356692, -0.01782828, -0.04152146, 0.04326178],\n", + " [ 0.00909091, -0.00181818, 0.01272727, -0.01090909]]))" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "C = c.reshape(4, 4)\n", + "D = B + 10 * C\n", + "D_inv = np.linalg.inv(D)\n", + "np.linalg.det(D), np.linalg.matrix_rank(D), D_inv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "13. Приравняйте к нулю отрицательные числа в матрице D_inv, а положительные - к единице. \n", + "Убедитесь, что в матрице D_inv остались только нули и единицы. \n", + "С помощью функции numpy.where, используя матрицу D_inv в качестве маски, а матрицы B и C - в качестве источников данных, получите матрицу E размером 4x4. \n", + "Элементы матрицы E, для которых соответствующий элемент матрицы D_inv равен 1, должны быть равны соответствующему элементу матрицы B, а элементы матрицы E, для которых соответствующий элемент матрицы D_inv равен 0, должны быть равны соответствующему элементу матрицы C.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 1, 1, 0],\n", + " [0, 0, 0, 1],\n", + " [0, 0, 0, 1],\n", + " [1, 0, 1, 0]])" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "D_inv = np.where(D_inv<0, 0,1)\n", + "D_inv" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 5, 14, 23, 14],\n", + " [ 10, 7, 12, 122],\n", + " [ 6, 9, 2, 212],\n", + " [ 32, 10, 212, 4]])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "E = np.where(D_inv==1, B, C)\n", + "E" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.13 ('base')", + "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" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "3fac50eb9b851c105fee14717bb99f4c7b6876d5ea31a486c3de1f9107615acf" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}