Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
2"""
3@file
4@brief Quelques questions autour de :epkg:`numpy`.
6"""
7import numpy
10def to_float32(x):
11 """
12 Convertit un nombre réel en nombre réel simple précision.
14 .. faqref:
15 :title: double ou float ?
16 :tag: numpy
18 :epkg:`numpy` est un module de calcul numérique.
19 Comme tous les modules optimisés le pour calcul,
20 il est écrit en partie en :epkg:`C++`. Ce language
21 est plus bas niveau que :epkg:`Python`.
22 :epkg:`numpy` propose différents types pour stocker des nombres
23 `Array types and conversions between types <https://docs.scipy.org/doc/numpy/user/basics.types.html>`_.
24 Pourquoi autant ? Parce que pour faire des calculs rapides, il faut utiliser
25 le plus petit type possible. Les réels sont représentés selon deux types :
26 `double <https://en.wikipedia.org/wiki/Double-precision_floating-point_format>`_
27 codé sur 8 octets ou 64 bits et
28 `float <https://en.wikipedia.org/wiki/Single-precision_floating-point_format>`_
29 codé sur 4 octets ou 32 bits.
30 Les premiers ont 15 chiffres de précisions, les seconds 7.
31 En machine learning, la précision n'est pas nécessairement un critère
32 de performances, c'est pourquoi beaucoup de librairies de
33 *machine learning* implémente leurs calculs en *float*.
34 Cela prend moins d'espace en mémoire, les calculs sont plus rapides.
35 Le type *float* en :epkg:`Python` correspond à un *double* en :epkg:`C++`.
36 Pour le convertir en nombre sur 32 bit, il faut utiliser :epkg:`numpy` :
38 .. runpython::
39 :showcode:
41 import math
42 print(math.pi)
44 import numpy
45 fpi = numpy.float32(math.pi)
46 print(fpi)
48 Est-ce qu'une fonction produit des résultats proches qu'elle
49 utilise des *float* ou des *double* ? C'est une bonne question
50 et la réponse est oui si elle est continue. Si elle ne l'est pas,
51 le résultat est parfois imprévisible. Pour en savoir
52 plus : :ref:`floatanddoubleroudingrst`.
53 """
54 return numpy.float32(x)