[PYTHON] Notes Jupyter, numpy, matplotlib utilisées dans les rapports

Mémo privé.

Jupyter

Environnement

jupyter_contrib_nbextensions est inclus pour la sortie pdf, qui sera décrite plus tard, et pour la complétion dans Jupyter, et n'est pas essentiel.

pip install jupyter jupyter_contrib_nbextensions
pip install matplotlib numpy #Ajouter d'autres éléments nécessaires

Lancez Jupyter dans votre navigateur

Je pensais que ce serait mieux dans VSCode que dans le navigateur, mais je n'ai pas changé après tout.

jupyter notebook --ip=127.0.0.1 --allow-root

Changer le thème de Jupyter

Vous pouvez mettre dans le module jupyterthemes, ou vous pouvez jouer avec ~ / .jupyter / custom / custom.css vous-même.

Dans le cas précédent

J'utilise https://gist.github.com/7ma7X/54f5e0b60e39ae8826bfcc580d524e40 comme custom.css.

Sortie de Jupyter en pdf

jupyter nbconvert hoge.ipynb --to pdf

la magie

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

numpy

Coefficient de corrélation

x = np.array([
  [1, 2, 1, 9, 10, 3, 2, 6, 7],
  [2, 1, 8, 3, 7, 5, 10, 7, 2]]) 

np.corrcoef(x)

Puisque la valeur de retour est une matrice de coefficient de corrélation, vérifiez l'élément (1, 2) (ou l'élément (2, 1)).

Index qui prend la valeur maximale (petite)

Il existe argmax et argmin.

np.argmax(arr)

Séquence de nombres à différence égale

C'est correct de le faire en notation d'inclusion de liste, mais il y a np.arange.

np.arange(5)
# array([0, 1, 2, 3, 4])

np.arange(3, 10, 2)
# array([3, 5, 7, 9])

Une séquence de nombres qui divise la section spécifiée en N parties égales

np.linspace(2.0, 3.0, num=5)
# array([2.  , 2.25, 2.5 , 2.75, 3.  ])

Séquence de rapport égal

np.logspace(3, 7, num=5, base=2)
# array([8, 16, 32, 64, 128])

Initialisation de la matrice

Notez que l'argument est un taple

np.zeros((3, 4))

Il existe également un np.ones qui initialise tous les éléments avec 1.

Produit intérieur des vecteurs, produit des matrices

Les deux sont np.dot

np.dot(A, B)

Concaténation de vecteurs et de matrices

C'est déroutant, vous devriez donc regarder https://note.nkmk.me/python-numpy-concatenate-stack-block/. Il existe une théorie selon laquelle il vaut mieux utiliser «numpy.stack».

v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])

np.concatenate([v1, v2])
# [1 2 3 4 5 6]

Notez que l'argument entier doit être une liste

Écraser un tableau multidimensionnel en un tableau unidimensionnel

«np.ravel» est plus rapide que le «flatten» intégré.

x = np.array([[1, 2, 3], [4, 5, 6]])
np.ravel(x)
# array([1, 2, 3, 4, 5, 6])

Longueur du vecteur (norme)

2 normes sont généralement utilisées

np.linalg.norm(X)
np.linalg.norm(X,ord=1) #1 norme

Au fait, np.linalg.norm correspond également à la norme matricielle [^ 2].

Extraction de colonnes dans une matrice

Écrivez comme mat [:, 2]

mat =\
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]

mat[:,2]
# array([ 2, 12, 22, 32, 42, 52, 62, 72, 82, 92])

Supprimer certains éléments du tableau

test = np.array([1, 2, 3, 4, 5])
np.delete(test, [1, 3])
# array([1, 3, 5])

** Ne peut pas être supprimé en tant que tranche! !! ** **

Matrice unitaire

np.identity(5)
np.eye(5)

L'un ou l'autre va bien.

Matrice inverse

np.linalg.inv(A)

Matrice de translocation

A.T

Formule matricielle

np.linalg.det(A)

Valeur unique / vecteur unique

une fonction La description
np.linalg.eig Valeur réelle / vecteur propre de la matrice générale
np.linalg.eigh Elmeat ou valeur propre / vecteur propre de matrice symétrique réelle
np.linalg.eigvals Valeur unique de la matrice générale
Ne calcule pas le vecteur propre
np.linalg.eigvalsh Elmeat ou valeurs propres d'une matrice symétrique réelle
Ne calcule pas le vecteur propre

Puisque l'algorithme de recherche des valeurs propres dans une matrice symétrique est différent de celui d'une matrice générale, ** utilisez eigh et eigvalsh dans une matrice symétrique pour la précision **.

Dans la méthode qui obtient à la fois la valeur propre et le vecteur propre, la valeur de retour est renvoyée sous la forme d'un taple de (valeur propre, vecteur propre).

nombre aléatoire

Nombres aléatoires qui suivent une distribution normale

np.random.normal(size = 1000000)
np.random.normal(loc=1.0, scale=2.0, size=20) 

Pour une distribution normale multivariée, utilisez multivariate_normal

mean = (1, 2)
cov = [[1, 0], [0, 1]]
np.random.multivariate_normal(mean, cov, 100)

Nombres aléatoires qui suivent une distribution uniforme

np.random.uniform(size = 1000000)
np.random.uniform(low=1.0, high=2.0, size=20) 

Nombre aléatoire suivant la distribution du chi carré

np.random.chisquare(2, 10000)

Autre matériel divers

Résoudre des équations linéaires simultanées

a = np.array([[3,1], [1,2]])
b = np.array([9,8])
np.linalg.solve(a, b)
# array([2.,  3.])

Transformation matricielle

Par exemple, transformer une matrice de taille (1, 12) en taille (3, 4).

a = array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
np.reshape(a, (3, 4))
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11]])

Nombre de conditions

En analyse numérique, une valeur qui est un indice de susceptibilité à l'erreur (on peut dire qu'une grande valeur est vulnérable à l'erreur)

np.linalg.cond(A, 2)

matplotlib

Graphique de base

plt.figure(figsize=(8, 6)) #Graphique horizontal 8 x vertical 6
plt.title("This is title.") #Donnez un titre au graphique

#Nommez l'axe
plt.xlabel("Nombre d'essais")

#Changer la plage de l'axe
plt.ylim(0, 2.5)

# label=Dans la légende, la couleur=Avec couleur, style de ligne=Changer le style de ligne avec
plt.plot(X, Y, label="one") 
plt.plot(X2, Y2, label="two")

plt.legend()
plt.show()

Graphique logistique

plt.yscale('log')

L'axe des y devient une échelle logarithmique.

histogramme

plt.hist(x, bins=100)

«bacs» est le nombre de bacs (nombre de classes)

Nuage de points

plt.scatter(x, y, marker='x', c='red')

contour

Il y a des moments où je souhaite ajouter des courbes de niveau en complément, par exemple lors du dessin de l'état d'optimisation.

x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)
 
X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)

plt.contour(X, Y, Z)
plt.gca().set_aspect('equal')

Les lignes de contour sont assez difficiles, vous devriez donc lire attentivement http://ailaby.com/contour/.

Autres techniques de codage Python

Boucle (zip) plusieurs listes ensemble

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

Boucle indexée (énumérer)

l = ['Alice', 'Bob', 'Charlie']

for i, name in enumerate(l):
    print(i, name)
# 0 Alice
# 1 Bob
# 2 Charlie

déclaration de format

print("i={} lambda={} x={}".format(i, l, x))

Fonction mathématique

Les fonctions communes se trouvent généralement dans le module math, même si elles ne proviennent pas de numpy. Vérifiez https://docs.python.org/ja/3/library/math.html pour plus de détails

from math import sin, cos, pi, exp

Recommended Posts

Notes Jupyter, numpy, matplotlib utilisées dans les rapports
Paramètres souvent utilisés dans Jupyter
Résumé des commandes fréquemment utilisées dans matplotlib
ipython + jupyter + plotly (matplotlib) Paramètres et notes d'utilisation
où de numpy
Note d'étude Jupyter_006
Bash dans Jupyter
Note d'étude Jupyter_008
Note d'étude Jupyter_004
Étude Jupyter note_001
Mettez matplotlib dans Centos7.
Notes officielles de Jupyter Docker Hub
Spécification d'axe avec NumPy
Afficher les images avec Matplotlib
Graphique 2D dans matplotlib
notes de mise en page de la légende matplotlib
Jupyter dans l'IDE Cloud9
[Exercice Numpy / pandas / matplotlib 01]
J'ai écrit le fonctionnement de base de Numpy dans Jupyter Lab.
Écrivez des graphiques en temps réel avec Matplotlib sur le notebook Jupyter
Remarques sur la coloration par valeur dans le diagramme de dispersion matplotlib