<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Les matrices numpy  (numpy arrays)
Vous êtes familiers avec les listes en Python.  Les "arrays" de numpy sont des listes ... ou des listes de listes ... ou des listes de listes de listes...  Ce sont essentiellement (sauf pour des différences mineures) des matrices.
On peut utiliser des listes Python pour initialiser un "array" de numpy.
Step1:  Au lieu d'imprimer l'objet numpy, on peut voir sa représentation directement
Step2:  Créons une deuxième liste ainsi qu'une liste de listes
Step3:  Nous avons donc une matrice avec 2 lignes et 5 colonnes, dont les éléments sont des entiers.
Step4:  On peut automatiquement créer des matrices particulières, soient remplies avec des zéros, des 1, ou la matrice identité (qui est une matrice carrée par définition.
Step5:  Numpy inclut une généralisation de la fonction "range" the Python, mais permettant des valeurs non-entières.
Step6:  Opérations élémentaires sur les matrices (arrays) numpy
Par défaut, les opérations sont faites sur chaque élément de la matrice.  Nous allons démontrer ceci
en créant deux matrices de la même taille (même nombre de lignes et de colonnes)
et en faisant diverses opérations.
Nous commençons avec des opérations sur une seule matrice.
Step7:  Nous considérons maintenant des opérations avec deux matrices.
Step8:  Si on essaie de faire de telles opérations sur des matrices de taille différente, cela ne fonctionne pas.
<ASSISTANT_TASK:>
Python Code:
import numpy as np  # Presque tous les programmeurs utilisent l'abbréviation np
ma_liste = [1, 2, 3, 4, 5]
array1 = np.array(ma_liste)
print("ma liste:", ma_liste)
print("objet numpy: ", array1)
Explanation: Les matrices numpy  (numpy arrays)
Vous êtes familiers avec les listes en Python.  Les "arrays" de numpy sont des listes ... ou des listes de listes ... ou des listes de listes de listes...  Ce sont essentiellement (sauf pour des différences mineures) des matrices.
On peut utiliser des listes Python pour initialiser un "array" de numpy.
End of explanation
array1
Explanation: Au lieu d'imprimer l'objet numpy, on peut voir sa représentation directement
End of explanation
ma_liste2 = [10, 20, 30, 40, 50]
mes_listes = [ma_liste, ma_liste2]
print("mes listes: \n", mes_listes)
print("-"*40)
matrice = np.array(mes_listes)
print("La matrice: \n", matrice)
print("-"*40)
print("Représentation de la matrice:")
matrice   # pour voir sa représentation
Explanation: Créons une deuxième liste ainsi qu'une liste de listes
End of explanation
print("shape = ", matrice.shape)     # information sur nombre de lignes et colonnes
print("type = ", matrice.dtype)     # information sur le contenu
Explanation: Nous avons donc une matrice avec 2 lignes et 5 colonnes, dont les éléments sont des entiers.
End of explanation
print(np.zeros(4))
print('-'*40)
print(np.zeros([3,3]))
print('-'*40)
print(np.ones([3,2]))
print('-'*40)
print(np.eye(4))    # matrice identité
Explanation: On peut automatiquement créer des matrices particulières, soient remplies avec des zéros, des 1, ou la matrice identité (qui est une matrice carrée par définition.
End of explanation
np.arange(1, 5, 0.2)
Explanation: Numpy inclut une généralisation de la fonction "range" the Python, mais permettant des valeurs non-entières.
End of explanation
mat1 = np.array([ [1, 2, 3], [4, 5, 6]])
print(3 * mat1)
print("-"*40)
print(mat1 / 2)
print("-"*40)
print(1 / mat1)
print("-"*40)
print(mat1 % 3)
print("-"*40)
print(mat1 + 20)
print("-"*40)
Explanation: Opérations élémentaires sur les matrices (arrays) numpy
Par défaut, les opérations sont faites sur chaque élément de la matrice.  Nous allons démontrer ceci
en créant deux matrices de la même taille (même nombre de lignes et de colonnes)
et en faisant diverses opérations.
Nous commençons avec des opérations sur une seule matrice.
End of explanation
mat2 = np.array([ [11, 12, 13], [14, 15, 16]])
print(mat1 + mat2)
print("-"*40)
print(mat2 - mat1)
print("-"*40)
print(mat1 * mat1)   # IMPORTANT: ceci n'est PAS la multiplication normale de matrices
Explanation: Nous considérons maintenant des opérations avec deux matrices.
End of explanation
mat3 = np.array([[1, 2], [3, 4]])
mat3 * mat1
Explanation: Si on essaie de faire de telles opérations sur des matrices de taille différente, cela ne fonctionne pas.
End of explanation
<END_TASK>