3.1. Création d’un tableau¶
Il existe plusieurs fonctions pour créer un tableau.
Création d’un tableau à partir d’une liste :
a = np.array([1, 2, 4]) print(a.dtype) # data type is calculated automatically a = np.array([1.2, 2, 4]) print(a.dtype) # all numbers are float # data type can be forced a = np.array([1, 2, 4], dtype=float) print(a.dtype)
int64 float64 float64
Création d’un tableau uniforme
N = 10 a = np.zeros(N) b = np.ones(N)
Créer un range
N = 10 a = np.arange(N) print('Valeur calculée', a.sum()) print('Valeur théorique', (N*(N+1))/2)
Valeur calculée 45 Valeur théorique 55.0
Répartition uniforme de points:
N = 300 x = np.linspace(0, 2*np.pi, num=N)
Avertissement
La fonction linspace inclus le premier et le dernier points. Dans le cas ci-dessus, la distance entre 2 points est donnée par \(2\pi/(N-1)\)
x = np.linspace(0, 1, num=10) print('ATTENTION\n'*5) print(x) x = np.linspace(0, 1, num=10, endpoint=False) print(x)
ATTENTION ATTENTION ATTENTION ATTENTION ATTENTION [0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556 0.66666667 0.77777778 0.88888889 1. ] [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
Répartition sur une échelle logarithmique:
x = np.logspace(0, 2) print(x.min()) print(x.max())
1.0 100.0
Distributions aléatoires:
data = np.random.rand(N) data = np.random.randint(10, size=N) data = np.random.normal(loc=.3, scale=2.0, size=N)
Exemple : On utiliser fait la somme de trois dés, quelle est approximativement la probabilité de trouver 8 ?
M = 100000 dice1 = np.random.randint(1, 7, size=M) dice2 = np.random.randint(1, 7, size=M) dice3 = np.random.randint(1, 7, size=M) result = dice1 + dice2 + dice3 print(np.mean(result==8))
0.09752
Lire et écrire dans un fichier:
Il existe deux type d’enregistrement : l’enregistrement sous forme d’un fichier texte et celui sous forme binaire. Dans un fichier texte, le tableau doit être de dimension un ou deux. Il est écrit ligne par ligne sous forme de nombre décimaux. Dans un fichier binaire, c’est la mémoire de l’ordinateur qui est recopier dans le fichier. Les fichiers textes ont l’avantage d’être lisible par un humain et d’être compatible avec beaucoup de logiciel, cependant l’écriture et surtout la lecture du fichier prend beaucoup de temps. Les fichiers binaire seront beaucoup plus rapide.
Pour enregistrer au format texte :
filename = 'test.dat' a = np.array([1, 2, 4]) np.savetxt(filename, a) with open(filename) as f: print(f.read()) # Numbers are converted to float
1.000000000000000000e+00 2.000000000000000000e+00 4.000000000000000000e+00
Il est possible de lire des fichiers au format “csv” tels que ceux exportés par un tableur. Voici un exemple.
# Création du fichier csv_content = """# Tension; courant 1; 2.3 2; 4.5 3; 7.0""" filename = 'test.csv' with open(filename, 'w') as f: f.write(csv_content) data = np.loadtxt(filename, delimiter=';') print(data[:,1])
[2.3 4.5 7. ]
Dans le cas présent, il est aussi possible de lire chaque colonne dans une variable directement :
# Utilisation de l'argument unpack tension, courant = np.loadtxt(filename, delimiter=';', unpack=True) print(tension/courant)
[0.43478261 0.44444444 0.42857143]
Pour les fichiers binaires, on utilise la fonction
np.load
etnp.save
. Le tableau sera strictement identique après relecture.filename='test.npy' a = np.array([1, 2, 4]) np.save(filename, a) new_a = np.load(filename) print(new_a) # a est toujours un tableau d'entier
[1 2 4]