Skip to content

Instantly share code, notes, and snippets.

@khinsen
Created December 3, 2018 16:05
Show Gist options
  • Save khinsen/206c0815d8b79c6875b28c39fca26b2c to your computer and use it in GitHub Desktop.
Save khinsen/206c0815d8b79c6875b28c39fca26b2c to your computer and use it in GitHub Desktop.
Cours GSON du 27 novembre 2018
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"hide_input": false
},
"source": [
"# NumPy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Bibliothèque pour le calcul scientifique en Python\n",
"- Ne fait pas partie de Python, doit être installé séparément\n",
"\n",
"**Trois usages principaux :**\n",
" - Gestion **efficace** de données homogènes et volumineuses\n",
" - Gestion de données **multidimensionnelles**\n",
" - **Interfaçage** avec du code en C / C++ / Fortran *(hors sujet dans ce cours)*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Une structure de données compacte : le tableau"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"| Liste | Tableau |\n",
"| --- | --- |\n",
"| taille variable | taille fixe |\n",
"| éléments arbitraires | éléments d'un même type |\n",
"| unidimensionnelle | multidimensionnel |"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Par convention, on rénomme `numpy` en `np` à l'importation."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les tableaux ont beaucoup en commun avec les listes:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
"[ 1 2 3 4 5 6 7 8 9 10]\n"
]
}
],
"source": [
"liste = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
"print(liste)\n",
"tableau = np.array(liste)\n",
"print(tableau)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 1\n",
"[4, 5, 6] [4 5 6]\n",
"[10, 9, 8, 7, 6, 5, 4, 3, 2, 1] [10 9 8 7 6 5 4 3 2 1]\n"
]
}
],
"source": [
"print(liste[0], tableau[0])\n",
"print(liste[3:6], tableau[3:6])\n",
"print(liste[::-1], tableau[::-1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Un tableau a pourtant quelques attributs en plus: le type des éléments (`dtype`) et la forme (`shape`), une généralisation de la longueur au cas multi-dimensionnel."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10\n",
"1\n",
"(10,)\n",
"int64\n"
]
}
],
"source": [
"print(len(tableau))\n",
"print(tableau.ndim)\n",
"print(tableau.shape)\n",
"print(tableau.dtype)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tableaux multidimensionnels"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les tableaux multidimensionnels ressemblent aux listes de listes (de listes ...)."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1, 2], [3, 4], [5, 6]]\n",
"[[1 2]\n",
" [3 4]\n",
" [5 6]]\n"
]
}
],
"source": [
"liste_de_listes = [[1, 2], [3, 4], [5, 6]]\n",
"print(liste_de_listes)\n",
"tableau_2d = np.array(liste_de_listes)\n",
"print(tableau_2d)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n",
"3\n",
"2\n",
"(3, 2)\n",
"int64\n"
]
}
],
"source": [
"print(len(liste_de_listes))\n",
"print(len(tableau_2d))\n",
"print(tableau_2d.ndim)\n",
"print(tableau_2d.shape)\n",
"print(tableau_2d.dtype)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'indexation se fait par dimension, mais autrement c'est exactement comme pour les listes."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau_2d[0, :]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 3, 5])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau_2d[:, 0]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 5])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau_2d[1:, 0]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[6, 5],\n",
" [4, 3],\n",
" [2, 1]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau_2d[::-1, ::-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Quelques fonctions préfabriquées pour créer des tableaux"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 2, 3, 4]\n",
"[0 1 2 3 4]\n"
]
}
],
"source": [
"print(list(range(5)))\n",
"print(np.arange(5))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,\n",
" 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.arange(0., 2.1, 0.1)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,\n",
" 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linspace(0, 2., 21)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1., 0., 0.],\n",
" [ 0., 3., 0.],\n",
" [ 0., 0., 5.]])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.diag([1., 3., 5.])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0., 0., 0.],\n",
" [ 0., 0., 0.]])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.zeros((2, 3))"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 0, 0],\n",
" [0, 0, 0]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.zeros((2, 3), dtype=np.int)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1., 0., 0., 0.],\n",
" [ 0., 1., 0., 0.],\n",
" [ 0., 0., 1., 0.],\n",
" [ 0., 0., 0., 1.]])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.eye(4)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 0, 0, 0],\n",
" [0, 1, 0, 0],\n",
" [0, 0, 1, 0],\n",
" [0, 0, 0, 1]])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.eye(4, dtype=np.int)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dtype('int32')"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.eye(4, dtype=np.int32).dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Arithmétique"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le principe à retenir : toutes les opérations sont faites élément par élément."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau + tableau"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau + 2"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2*tableau"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1, 4],\n",
" [ 9, 16],\n",
" [25, 36]])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tableau_2d ** 2"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1. , 1.41421356, 1.73205081, 2. , 2.23606798,\n",
" 2.44948974, 2.64575131, 2.82842712, 3. , 3.16227766])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sqrt(tableau)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice : créez les tableaux suivants"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"hide_input": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1., -1., -1.],\n",
" [-1., 1., -1.],\n",
" [-1., -1., 1.]])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2*np.eye(3)-1"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"hide_input": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1, 0, 0, 0],\n",
" [ 0, 4, 0, 0],\n",
" [ 0, 0, 9, 0],\n",
" [ 0, 0, 0, 16]])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.diag(np.arange(1, 5)**2)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1, 0, 0, 0],\n",
" [ 0, 4, 0, 0],\n",
" [ 0, 0, 9, 0],\n",
" [ 0, 0, 0, 16]])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.diag(np.arange(5)**2)[1:, 1:]"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"hide_input": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([4, 3, 2, 1, 0, 1, 2, 3, 4])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.abs(np.arange(9)-4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plots"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La ligne qui commence avec % n'est pas du Python, mais une instruction pour Jupyter. Elle doit être tel qu'écrite ci-dessous, on n'a même pas droit à un commentaire après !"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x112178cc0>]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nEoH+HxQnrTjZ6F3ZAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10ed88470>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0., 1., 20)\n",
"y = x**2\n",
"plt.plot(x, y)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1122ade80>]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1121d9a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0., 2.*np.pi, 50)\n",
"y = np.sin(x)\n",
"plt.plot(x, y)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"plt.plot?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice : refaites le plot suivant"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1122b6f60>]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nwQ8RzAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1122b6c18>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0, 2.*np.pi, 50)\n",
"plt.plot(x, np.sin(x))\n",
"plt.plot(x, np.cos(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pour tout savoir sur les plots, consultez la documentation :"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"plt.plot?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Efficacité : mémoire et temps CPU"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Combien de mémoire occupe une liste ?"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import random\n",
"\n",
"def liste_de_nombres_aleatoires(n):\n",
" return [random.uniform(0, 1) for _ in range(n)]"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0.45746533964959313,\n",
" 0.595769007781765,\n",
" 0.626199638230877,\n",
" 0.7063634990393685,\n",
" 0.4353474973701733,\n",
" 0.29776452050739255,\n",
" 0.31325815381725475,\n",
" 0.516490107822669,\n",
" 0.062355047756414206,\n",
" 0.9344328762660984]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"liste_de_nombres_aleatoires(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python propose la fonction `sys.getsizeof` pour trouver la taille en mémoire d'un objet. On peut l'appliquer à un tableau sans complications :"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import sys\n",
"\n",
"def memoire_occupee_par_un_tableau(t):\n",
" return sys.getsizeof(t)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"120"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"memoire_occupee_par_un_tableau(np.array([1, 2, 3]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note: La valeur obtenu indique le nombre d'octets que le tableau occupe. A titre de comparaison, la mémoire vive d'un ordinateur moderne se mesure en gigaoctets (GO), donc des milliards d'octets. Comptez 1 GO pour un smartphone entrée de gamme et 64 GO pour un ordinateur de bureau haut de gamme."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pour une liste, cette fonction n'évalue pas la mémoire occupée par ses éléments, car il s'agit d'objets indépendants. Il faut les compter séparément :"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"172"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import sys\n",
"sys.getsizeof([1, 2, 3]) + sys.getsizeof(1) + sys.getsizeof(2) + sys.getsizeof(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice : écrivez une fonction qui calcule la mémoire totale occupée par une liste et ses éléments"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def memoire_occupee_par_une_liste(l):\n",
" m = sys.getsizeof(l)\n",
" for element in l:\n",
" m += sys.getsizeof(element)\n",
" return m"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"172"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"memoire_occupee_par_une_liste([1, 2, 3])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice : faites un plot de la mémoire nécessaire pour stocker une liste et un tableau en fonction du nombre d'éléments"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x112969d30>"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112810e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n = np.linspace(0, 10000, 1000, dtype=np.int)\n",
"m_liste = []\n",
"m_tableau = []\n",
"for nn in n:\n",
" l = liste_de_nombres_aleatoires(nn)\n",
" m_liste.append(memoire_occupee_par_une_liste(l))\n",
" m_tableau.append(memoire_occupee_par_un_tableau(np.array(l)))\n",
"plt.plot(n, m_liste, label='liste')\n",
"plt.plot(n, m_tableau, label='tableau')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice : modifiez ce plot pour montrer la mémoire utilisée par élément"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x112a80f98>"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1121cd860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n = np.linspace(1, 10000, 1000, dtype=np.int)\n",
"m_liste = []\n",
"m_tableau = []\n",
"for nn in n:\n",
" l = liste_de_nombres_aleatoires(nn)\n",
" m_liste.append(memoire_occupee_par_une_liste(l)/nn)\n",
" m_tableau.append(memoire_occupee_par_un_tableau(np.array(l))/nn)\n",
"plt.plot(n, m_liste, label='liste')\n",
"plt.plot(n, m_tableau, label='tableau')\n",
"plt.xlabel(\"nombre d'éléments\")\n",
"plt.ylabel(\"octets par élément\")\n",
"plt.legend()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment