Hide keyboard shortcuts

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`. 

5 

6""" 

7import numpy 

8 

9 

10def to_float32(x): 

11 """ 

12 Convertit un nombre réel en nombre réel simple précision. 

13 

14 .. faqref: 

15 :title: double ou float ? 

16 :tag: numpy 

17 

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` : 

37 

38 .. runpython:: 

39 :showcode: 

40 

41 import math 

42 print(math.pi) 

43 

44 import numpy 

45 fpi = numpy.float32(math.pi) 

46 print(fpi) 

47 

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)