{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 2 3]\n",
      "<class 'numpy.ndarray'>\n",
      "<class 'list'>\n",
      "<class 'numpy.int16'>\n",
      "<class 'numpy.int16'>\n",
      "-6487 59049\n",
      "<class 'numpy.int16'>\n",
      "<class 'numpy.int64'>\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "x = np.array([1, 2, 3], np.int16)\n",
    "print(x)\n",
    "print(type(x))\n",
    "y = list(x)\n",
    "print(type(y))\n",
    "print(type(x[0]))\n",
    "print(type(y[0]))\n",
    "x[2] = x[2]**10\n",
    "y[2] = y[2]**10\n",
    "print(x[2], y[2])\n",
    "print(type(x[2]))\n",
    "print(type(y[2]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 2. 3.]\n",
      " [4. 5. 6.]]\n",
      "<class 'numpy.ndarray'>\n",
      "<class 'numpy.float64'>\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1, 2, 3], [4, 5, 6]], np.float64)\n",
    "print(a)\n",
    "print(type(a[0]))\n",
    "print(type(a[0,0]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1. 4.]\n",
      "[2. 5.]\n",
      "[3. 6.]\n",
      "[1. 2. 3.]\n"
     ]
    }
   ],
   "source": [
    "print(a[:, 0])\n",
    "print(a[:, 1])\n",
    "print(a[:, 2])\n",
    "print(a[0, :])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 2. 3.]\n",
      " [4. 5. 6.]]\n",
      "(2, 3)\n",
      "2\n",
      "float64\n",
      "6\n",
      "48\n"
     ]
    }
   ],
   "source": [
    "print(a)\n",
    "print(a.shape)  # Matrice 2x3.\n",
    "print(a.ndim)   # Dimension du tableau, ici c'est une matrice\n",
    "print(a.dtype)  # Type de chaque élément\n",
    "print(a.size)   # Nombre d'éléments dans le ndarray\n",
    "print(a.nbytes) # Un float64 est stocké sur 8 bytes et 8*6 = 48"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[1. 2. 3.]\n",
      "  [4. 5. 6.]]\n",
      "\n",
      " [[1. 2. 3.]\n",
      "  [4. 5. 6.]]]\n",
      "(2, 2, 3)\n",
      "3\n",
      "float64\n",
      "12\n",
      "96\n"
     ]
    }
   ],
   "source": [
    "b = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]], np.float64)\n",
    "print(b)\n",
    "print(b.shape)  # Tableau tridimentionel 2x2x3.\n",
    "print(b.ndim)   # Dimension du tableau\n",
    "print(b.dtype)  # Type de chaque élément\n",
    "print(b.size)   # Nombre d'éléments dans le ndarray\n",
    "print(b.nbytes) # Un float64 est stocké sur 8 bytes et 8*12 = 96"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 2. 3.]\n",
      " [4. 5. 6.]]\n",
      "[[1. 4.]\n",
      " [2. 5.]\n",
      " [3. 6.]]\n"
     ]
    }
   ],
   "source": [
    "print(a)\n",
    "print(a.T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "inf\n",
      "nan\n",
      "-inf\n",
      "inf\n",
      "-0.0\n",
      "0.0\n",
      "2.718281828459045\n",
      "0.5772156649015329\n",
      "3.141592653589793\n"
     ]
    }
   ],
   "source": [
    "# Divers constantes.\n",
    "print(np.inf)\n",
    "print(np.NAN)\n",
    "print(np.NINF)\n",
    "print(np.PINF)\n",
    "print(np.NZERO)\n",
    "print(np.PZERO)\n",
    "print(np.e)\n",
    "print(np.euler_gamma)\n",
    "print(np.pi)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0. 0. 0.]\n",
      " [0. 0. 0.]\n",
      " [0. 0. 0.]]\n",
      "[[1. 0. 0. 0. 0.]\n",
      " [0. 1. 0. 0. 0.]\n",
      " [0. 0. 1. 0. 0.]\n",
      " [0. 0. 0. 1. 0.]\n",
      " [0. 0. 0. 0. 1.]]\n",
      "[[0. 0. 0. 0. 0.]\n",
      " [1. 0. 0. 0. 0.]\n",
      " [0. 1. 0. 0. 0.]\n",
      " [0. 0. 1. 0. 0.]\n",
      " [0. 0. 0. 1. 0.]]\n",
      "[[1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]\n",
      " [1. 1. 1. 1. 1.]]\n",
      "[[[5. 5. 5. 5.]\n",
      "  [5. 5. 5. 5.]\n",
      "  [5. 5. 5. 5.]]\n",
      "\n",
      " [[5. 5. 5. 5.]\n",
      "  [5. 5. 5. 5.]\n",
      "  [5. 5. 5. 5.]]]\n",
      "[7 7 8 2 7 8 6 0 6 5 3 6 6 0 2 1 0 4 1 8 3 8 4 3 1 6 0 0 6 3 2 8 4 0 7]\n",
      "[0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 3 4 4 4 5 6 6 6 6 6 6 7 7 7 7 8 8 8 8 8]\n",
      "[[0.91620992 0.37949206 0.19017686 0.4501122  0.85729064 0.96594495]\n",
      " [0.61274779 0.81142286 0.86594386 0.48201407 0.95185074 0.63313927]]\n",
      "[[0.19017686 0.37949206 0.4501122  0.85729064 0.91620992 0.96594495]\n",
      " [0.48201407 0.61274779 0.63313927 0.81142286 0.86594386 0.95185074]]\n"
     ]
    }
   ],
   "source": [
    "c = np.zeros([3,3], dtype=np.float64) # Matrice 3x3 remplie de 0\n",
    "print(c)\n",
    "I = np.eye(5, dtype=np.float64) # Matrice identité 5x5\n",
    "print(I)\n",
    "d = np.eye(5, dtype=np.float64, k=-1) # Matrice ayant des 1 dans la sous-diagonale\n",
    "print(d)\n",
    "m1 = np.ones([5,5], dtype=np.float64) # Matrice 5x5 remplie de 1\n",
    "print(m1)\n",
    "m5 = np.full([2,3,4], dtype=np.float64, fill_value = 5) # Matrice 5x5 remplie de 1\n",
    "print(m5)\n",
    "r1 = np.random.randint(low=0, high=9, size=35)\n",
    "print(r1)\n",
    "r2 = np.sort(r1)\n",
    "print(r2)\n",
    "r3 = np.random.rand(2,6)\n",
    "print(r3)\n",
    "r4 = np.sort(r3)\n",
    "print(r4)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 3  6  9 12]\n",
      "[11 22 33 44]\n",
      "[ 10  40  90 160]\n",
      "[0.9622677  0.68813992 0.16808979 0.94529712 0.72497234]\n",
      "0.6977533727970778\n",
      "0.6977533727970778\n",
      "0.7249723392921277\n",
      "0.2872707925472416\n",
      "[0.16808979 0.68813992 0.72497234 0.94529712 0.9622677 ]\n",
      "[0.98095245 0.82954199 0.40998754 0.97226391 0.85145308]\n",
      "[0.82049003 0.6351015  0.16729936 0.81067093 0.66311474]\n"
     ]
    }
   ],
   "source": [
    "x1 = np.array([1, 2, 3, 4])\n",
    "x2 = np.array([10, 20, 30, 40])\n",
    "r1 = 3 * x1\n",
    "print(r1)\n",
    "r2 = x1 + x2\n",
    "print(r2)\n",
    "r3 = x1 * x2\n",
    "print(r3)\n",
    "x3 = np.random.rand(5)\n",
    "print(x3)\n",
    "print(np.mean(x3))   # c.f. https://numpy.org/devdocs/reference/routines.statistics.html\n",
    "print(np.average(x3))\n",
    "print(np.median(x3))\n",
    "print(np.std(x3))\n",
    "print(np.sort(x3))\n",
    "print(np.sqrt(x3))\n",
    "print(np.sin(x3))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.        +1.j         1.        +1.j         2.        +1.j\n",
      " 0.70710678+0.70710678j]\n",
      "[-1.00000000e+00+0.j  0.00000000e+00+2.j  3.00000000e+00+4.j\n",
      "  2.22044605e-16+1.j]\n",
      "[0.54030231+0.84147098j 1.46869394+2.28735529j 3.99232405+6.21767631j\n",
      " 1.54186346+1.31753841j]\n",
      "(0.5403023058681398+0.8414709848078965j)\n"
     ]
    }
   ],
   "source": [
    "z1 = np.array([1.0j, 1+1.0j, 2+1.0j, np.cos(np.pi/4)+ np.sin(np.pi/4)*1.j])\n",
    "print(z1)\n",
    "z2 = z1 * z1; print(z2)\n",
    "z3 = np.exp(z1); print(z3); print(z3[0])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(-1.0000000199999999+0j)\n"
     ]
    }
   ],
   "source": [
    "z10 = 1.00000001j\n",
    "z11 = z10**2\n",
    "print(z11)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.        +1.j         1.        +1.j         2.        +1.j\n",
      " 0.70710678+0.70710678j]\n",
      "[-1.00000000e+00+0.j  0.00000000e+00+2.j  3.00000000e+00+4.j\n",
      "  2.22044605e-16+1.j]\n",
      "[0.54030231+0.84147098j 1.46869394+2.28735529j 3.99232405+6.21767631j\n",
      " 1.54186346+1.31753841j]\n",
      "(0.5403023058681398+0.8414709848078965j)\n"
     ]
    }
   ],
   "source": [
    "z1 = np.array([1.0j, 1+1.0j, 2+1.0j, np.cos(np.pi/4)+ np.sin(np.pi/4)*1.j])\n",
    "print(z1)\n",
    "z2 = z1 * z1; print(z2)\n",
    "z3 = np.exp(z1); print(z3); print(z3[0])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=1; b=3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
