Skip to content

Les tableaux NumPy ( ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ) contiennent un type de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ). Vous pouvez dรฉfinir cela via diverses opรฉrations, par exemple lors de la crรฉation d’un ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ avec ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ซโ€Œ๐ซ๐šโ€Œ๐ฒโ€Œ() , ou le modifier ultรฉrieurement avec ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() .

Essentiellement, ร  chaque ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ se voit attribuer un seul ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ , garantissant que tous les รฉlรฉments partagent le mรชme type de donnรฉes.

Bien que NumPy fournisse un mรฉcanisme permettant de gรฉrer plusieurs types de donnรฉes au sein d’un seul tableau , appelรฉ ยซ tableaux structurรฉs ยป, cet article ne couvre pas ce sujet. Pour traiter des ensembles de donnรฉes contenant plusieurs types (par exemple, des colonnes de nombres et de chaรฎnes), l’utilisation de pandas est souvent plus pratique.

Reportez-vous ร  l’article suivant pour ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ et ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() dans pandas.

La version de NumPy utilisรฉe dans cet article est la suivante. Notez que les fonctionnalitรฉs peuvent varier selon les versions.

import numpy as np print(np.__version__) # 1.26.1 

Principaux types de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) dans NumPy

Les principaux types de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) dans NumPy sont les suivants. La plage de valeurs que chaque type d’entiers et de nombres ร  virgule flottante peut prendre sera abordรฉe plus tard.

๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ Type de code Description
8 ๐ขโ€Œ1 Entier signรฉ sur 8 bits
16 janvier ๐ขโ€Œ2 Entier signรฉ de 16 bits
32 ๐ขโ€Œ4 Entier signรฉ 32 bits
64 ans ๐ขโ€Œ8 Entier signรฉ de 64 bits
8 septembre ๐ฎโ€Œ1 Entier non signรฉ de 8 bits
16 janvier ๐ฎโ€Œ2 Entier non signรฉ de 16 bits
๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ32 ๐ฎโ€Œ4 Entier non signรฉ de 32 bits
๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ64 ๐ฎโ€Œ8 Entier non signรฉ de 64 bits
16 janvier ๐Ÿโ€Œ2 Virgule flottante demi-prรฉcision (1 bit pour le signe, 5 bits pour l’exposant, 10 bits pour la mantisse)
32 ans et plus ๐Ÿโ€Œ4 Virgule flottante simple prรฉcision (1 bit pour le signe, 8 bits pour l’exposant, 23 bits pour la mantisse)
64 ๐Ÿโ€Œ8 Virgule flottante double prรฉcision (1 bit pour le signe, 11 bits pour l’exposant, 52 bits pour la mantisse)
128 ๐Ÿโ€Œ16 Type ร  virgule flottante ร  quadruple prรฉcision (1 bit pour le signe, 15 bits pour l’exposant, 112 bits pour la mantisse)
๐œ๐จ๐ฆ๐ฉ๐ฅ๐ž๐ง๐ญ 64 ๐œโ€Œ8 Nombre complexe (les parties rรฉelles et imaginaires sont 32 )
๐œ๐จ๐ฆ๐ฉ๐ฅ๐ž๐ง๐ญ 128 ๐œโ€Œ16 Nombre complexe (les parties rรฉelles et imaginaires sont ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ64 )
๐œ๐จ๐ฆ๐ฉ๐ฅ๐ž๐ง๐ญ 256 32 Nombre complexe (les parties rรฉelles et imaginaires sont 128 )
๐›โ€Œ๐จ๐ง๐ฌ๐ข๐ž๐ง๐ญ ๐ฅ๐ž ? Boolรฉen ( T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ ou F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ )
๐ฎ๐ง๐ž๐ง๐ฌ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž๐ง๐ญ Tu Chaรฎne Unicode
๐จ๐ฎ๐ฌ๐ฌ๐ข๐ž๐ง ๐ฉ๐ซ๐ข๐ž๐ง๐ญ๐ž๐ง๐ญ O Objet Python

Le suffixe numรฉrique dans un nom ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ indique le nombre de bits, tandis que le suffixe numรฉrique dans un code de type indique le nombre d’octets. Notez que les nombres sont diffรฉrents mรชme pour le mรชme type.

Le code de type ? pour ๐›โ€Œ๐จโ€Œ๐จโ€Œ๐ฅโ€Œ ne signifie pas inconnu mais est traduit attribuรฉ ? .

Lors de la spรฉcification de ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ dans des fonctions ou des mรฉthodes, par exemple, ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ peut รชtre spรฉcifiรฉ des trois maniรจres suivantes :

  • Type d’objet : ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐งโ€Œ๐ญโ€Œ64
  • Saisissez le nom sous forme de chaรฎne : ยซ ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ64 ยป
  • Tapez le code sous forme de chaรฎne : ยซ ๐ขโ€Œ8 ยป
a = np.array([1, 2, 3], dtype=np.int64) print(a.dtype) # int64 a = np.array([1, 2, 3], dtype='int64') print(a.dtype) # int64 a = np.array([1, 2, 3], dtype='i8') print(a.dtype) # int64 

Notez que lorsque ๐›โ€Œ๐จโ€Œ๐จโ€Œ๐ฅโ€Œ , ๐ฎโ€Œ๐งโ€Œ๐ขโ€Œ๐œโ€Œ๐จโ€Œ๐โ€Œ๐žโ€Œ ou ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ est spรฉcifiรฉ comme un objet de type, il doit รชtre suffixรฉ par un trait de soulignement _ , comme dans ๐งโ€Œ๐ฉโ€Œ.๐›โ€Œ๐จโ€Œ๐จโ€Œ๐ฅโ€Œ_ , ๐งโ€Œ๐ฉโ€Œ.๐ฎโ€Œ๐งโ€Œ๐ขโ€Œ๐œโ€Œ๐จโ€Œ๐โ€Œ๐žโ€Œ_ , ou ๐งโ€Œ๐ฉโ€Œ.๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ_ .

Les types Python tels que ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ , ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ et ๐ฌโ€Œ๐ญโ€Œ๐ซโ€Œ peuvent รฉgalement รชtre spรฉcifiรฉs. Dans ce cas, ils sont traitรฉs comme l’รฉquivalent ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ . Voici des exemples dans l’environnement Python 3, 64 bits. ๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ , qui n’est pas un type Python standard, est inclus pour plus de commoditรฉ.

Tapez Python Exemple รฉquivalent de ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ
๐ข๐ง๐ž๐ง๐ญ๐ž 64 ans
๐Ÿ๐š๐ข๐ฌ๐ฌ๐ข๐ž๐ง ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž 64
D’accord… ๐ฎ๐ง๐ž๐ง๐ฌ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž๐ง๐ญ๐ž๐ง๐ญ
( ๐ฎ๐ž๐ง ๐ฉ๐ซ๐ข๐ž๐ง๐ฌ ) ๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ64

Lors de la spรฉcification en tant qu’argument, les chaรฎnes ‘๐ขโ€Œ๐งโ€Œ๐ญโ€Œ’ ou ‘๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ’ peuvent รชtre utilisรฉes pour ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ ou ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ . Le type non Python ๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ doit รชtre spรฉcifiรฉ ร  l’aide de la chaรฎne ‘๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ’ .

a = np.array([1, 2, 3], dtype=int) print(a.dtype) # int64 a = np.array([1, 2, 3], dtype='int') print(a.dtype) # int64 

Plage de types numรฉriques (valeurs minimales et maximales)

La plage de valeurs pour les entiers ( ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ , ๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ ) et les nombres ร  virgule flottante ( ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ ) peut รชtre vรฉrifiรฉe avec ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ() et ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ() .

๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ()

Utilisez ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ() pour les entiers ( ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ , ๐ฎโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ ).

La spรฉcification d’un type de donnรฉes comme argument renvoie un objet ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐ขโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ , qui peut รชtre inspectรฉ ร  l’aide de ๐ฉโ€Œ๐ซโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ() pour voir un aperรงu, ou ses attributs ๐ฆโ€Œ๐šโ€Œ๐ฑโ€Œ et ๐ฆโ€Œ๐ขโ€Œ๐งโ€Œ sont accessibles pour obtenir les valeurs maximales et minimales sous forme de nombres.

L’exemple suivant utilise ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐งโ€Œ๐ญโ€Œ64 , mais des chaรฎnes telles que ยซ ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ64 ยป ou ยซ ๐ขโ€Œ8 ยป peuvent รฉgalement รชtre utilisรฉes.

ii = np.iinfo(np.int64) print(type(ii)) # <class 'numpy.iinfo'> print(ii) # Machine parameters for int64 # --------------------------------------------------------------- # min = -9223372036854775808 # max = 9223372036854775807 # --------------------------------------------------------------- #  print(ii.max) # 9223372036854775807 print(type(ii.max)) # <class 'int'> print(ii.min) # -9223372036854775808 print(ii.bits) # 64 

Vous pouvez รฉgalement exprimer la valeur directement comme argument.

i = 100 print(type(i)) # <class 'int'> print(np.iinfo(i)) # Machine parameters for int64 # --------------------------------------------------------------- # min = -9223372036854775808 # max = 9223372036854775807 # --------------------------------------------------------------- #  ui = np.uint8(100) print(type(ui)) # <class 'numpy.uint8'> print(np.iinfo(ui)) # Machine parameters for uint8 # --------------------------------------------------------------- # min = 0 # max = 255 # --------------------------------------------------------------- #  

Les tableaux NumPy ( ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ) ne peuvent pas รชtre spรฉcifiรฉs. Vous devez prรฉciser le type de donnรฉes du tableau ou fournir une valeur spรฉcifique au lieu.

a = np.array([1, 2, 3], dtype=np.int8) print(type(a)) # <class 'numpy.ndarray'> # print(np.iinfo(a)) # ValueError: Invalid integer data type 'O'. print(np.iinfo(a.dtype)) # Machine parameters for int8 # --------------------------------------------------------------- # min = -128 # max = 127 # --------------------------------------------------------------- #  print(np.iinfo(a[0])) # Machine parameters for int8 # --------------------------------------------------------------- # min = -128 # max = 127 # --------------------------------------------------------------- #  

๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ()

Utilisez ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ() pour les nombres ร  virgule flottante ( ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ ).

L’utilisation est la mรชme que ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ() . Les arguments peuvent รชtre un objet de type (par exemple, ๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ64 ), une chaรฎne ( ‘๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ64’ , ‘๐Ÿโ€Œ8’ ) ou une valeur ( 0.1 ).

Vous pouvez gรฉnรฉrer un aperรงu avec ๐ฉโ€Œ๐ซโ€Œ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ() ou obtenir les valeurs de divers attributs sous forme de nombres.

fi = np.finfo(np.float64) print(type(fi)) # <class 'numpy.finfo'> print(fi) # Machine parameters for float64 # --------------------------------------------------------------- # precision = 15 resolution = 1.0000000000000001e-15 # machep = -52 eps = 2.2204460492503131e-16 # negep = -53 epsneg = 1.1102230246251565e-16 # minexp = -1022 tiny = 2.2250738585072014e-308 # maxexp = 1024 max = 1.7976931348623157e+308 # nexp = 11 min = -max # smallest_normal = 2.2250738585072014e-308 smallest_subnormal = 4.9406564584124654e-324 # --------------------------------------------------------------- #  print(fi.max) # 1.7976931348623157e+308 print(type(fi.max)) # <class 'numpy.float64'> print(fi.min) # -1.7976931348623157e+308 print(fi.eps) # 2.220446049250313e-16 print(fi.bits) # 64 print(fi.iexp) # 11 print(fi.nmant) # 52 

๐งโ€Œ๐ฉโ€Œ.๐Ÿโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ() fournit plus d’informations que ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ขโ€Œ๐งโ€Œ๐Ÿโ€Œ๐จโ€Œ() , telles que ๐žโ€Œ๐ฉโ€Œ๐ฌโ€Œ pour epsilon, ๐ขโ€Œ๐žโ€Œ๐ฑโ€Œ๐ฉโ€Œ et ๐งโ€Œ๐ฆโ€Œ๐šโ€Œ๐งโ€Œ๐ญโ€Œ pour le nombre de bits dans l’exposant et la mantisse. Pour plus de dรฉtails, reportez-vous ร  la documentation officielle ci-dessus.

Le nombre de caractรจres dans les chaรฎnes

Lorsque les รฉlรฉments sont conservรฉs sous forme de chaรฎnes, le ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ sera formatรฉ comme <U3 , par exemple.

a_str = np.array([1, 22, 333], dtype=str) print(a_str) # ['1' '22' '333'] print(a_str.dtype) # <U3 

Les caractรจres < et > reprรฉsentent respectivement le petit-boutiste et le grand-boutiste.

Le numรฉro de fin indique le nombre maximal de caractรจres pouvant รชtre stockรฉs. Lorsque ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ est spรฉcifiรฉ comme ๐ฌโ€Œ๐ญโ€Œ๐ซโ€Œ dans ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ() , comme indiquรฉ dans cet exemple, ce nombre serait dรฉfini en fonction de l’รฉlรฉment le plus long.

La mรฉmoire rรฉpartie ร  chaque รฉlรฉment ne doit contenir que ce nombre de caractรจres, ce qui signifie que les chaรฎnes plus longues que ce nombre de caractรจres ne peuvent pas รชtre prises en charge et seront tronquรฉes. Il est donc nรฉcessaire de prรฉciser ร  l’avance un type de donnรฉes avec une longueur de caractรจres suffisante.

a_str[0] = 'abcde' print(a_str) # ['abc' '22' '333'] a_str10 = np.array([1, 22, 333], dtype='U10') print(a_str10.dtype) # <U10 a_str10[0] = 'abcde' print(a_str10) # ['abcde' '22' '333'] 

๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ stock des pointeurs vers des objets Python

Le type ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ est un type de donnรฉes spรฉcial qui stocke des pointeurs vers des objets Python.

Cela signifie que les donnรฉes rรฉelles de chaque รฉlรฉment sont stockรฉes dans un espace mรฉmoire sรฉparรฉ, ce qui permet ร  un ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ de contenir des pointeurs vers des donnรฉes de diffรฉrents types.

a_object = np.array([1, 0.1, 'abc'], dtype=object) print(a_object) # [1 0.1 'abc'] print(a_object.dtype) # object print(type(a_object[0])) print(type(a_object[1])) print(type(a_object[2])) # <class 'int'> # <class 'float'> # <class 'str'> 

Lorsque ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ est dรฉfini sur ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ , vous pouvez augmenter librement le nombre de caractรจres dans une chaรฎne.

a_object[2] = 'abcXYZ' print(a_object) # [1 0.1 'abcXYZ'] 

Les tableaux contenant des รฉlรฉments de diffรฉrents types peuvent รฉgalement รชtre reprรฉsentรฉs ร  l’aide du type ๐ฅโ€Œ๐ขโ€Œ๐ฌโ€Œ๐ญโ€Œ intรฉgrรฉ ร  Python .

๐ฅโ€Œ๐ขโ€Œ๐ฌโ€Œ๐ญโ€Œ et ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซ๐šโ€Œ๐ฒโ€Œ se comportent diffรฉremment avec les opรฉrateurs. Bien que ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซ๐šโ€Œ๐ฒโ€Œ prenne en charge les opรฉrations รฉlรฉment par รฉlรฉment, la crรฉation et le traitement de telles donnรฉes dans NumPy pourraient รชtre moins courants, compte tenu de la polyvalence de ๐ฅโ€Œ๐ขโ€Œ๐ฌโ€Œ๐ญโ€Œ pour la gestion de types mixtes.

l = [1, 0.1, 'abcXYZ'] print(type(l)) # <class 'list'> print(type(l[0])) print(type(l[1])) print(type(l[2])) # <class 'int'> # <class 'float'> # <class 'str'> print(a_object * 2) # [2 0.2 'abcXYZabcXYZ'] print(l * 2) # [1, 0.1, 'abcXYZ', 1, 0.1, 'abcXYZ'] 

Remplacez ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ par ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ()

Utilisation de base de ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ()

La mรฉthode ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() de ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ permet de modifier (caster) ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ .

Un nouveau ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ avec un ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ modifiรฉ est gรฉnรฉrรฉ, et le ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ d’origine reste identique.

a = np.array([1, 2, 3]) print(a) print(a.dtype) # [1 2 3] # int64 a_float = a.astype(np.float32) print(a_float) print(a_float.dtype) # [1. 2. 3.] # float32 print(a) print(a.dtype) # [1 2 3] # int64 

Comme mentionnรฉ ci-dessus, ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ peut รฉgalement รชtre spรฉcifiรฉ comme une chaรฎne de nom de type, une chaรฎne de code de type ou un type Python.

a_int = a.astype('int32') print(a_int) print(a_int.dtype) # [1 2 3] # int32 a_uint = a.astype('u8') print(a_uint) print(a_uint.dtype) # [1 2 3] # uint64 a_float = a.astype(float) print(a_float) print(a_float.dtype) # [1. 2. 3.] # float64 

Conversion de ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ en ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ tronquer la partie dรฉcimale

La conversion de nombres ร  virgule flottante ( ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ ) en entiers ( ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ ) tronque la partie dรฉcimale (arrondie vers 0 ).

a = np.array([-2, -1.5, -1, -0.5, 0.5, 1, 1.5, 2]) print(a.astype(int)) # [-2 -1 -1 0 0 1 1 2] 

Reportez-vous aux articles suivants pour l’arrondi, la troncature et le plafond dans NumPy.

Conversions de type implicites

En plus de la conversion de type explicite avec ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() , une conversion de type implicite peut se produire pendant les opรฉrations.

Par exemple, la division avec l’opรฉrateur / renvoyer รฉgaux mรชme entre des entiers.

a_int = np.array([1, 2, 3]) a_float = np.array([1.0, 2.0, 3.0]) print((a_int / a_int).dtype) # float64 print((a_int / a_float).dtype) # float64 

Pour les opรฉrations + , , * , // et ** , si les deux opรฉrandes sont des entiers, le rรฉsultat est ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ ; si au moins un opรฉrande est un nombre ร  virgule flottante, le rรฉsultat est ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ .

print((a_int + a_int).dtype) # int64 print((a_int + a_float).dtype) # float64 print((a_int - a_int).dtype) # int64 print((a_int - a_float).dtype) # float64 print((a_int * a_int).dtype) # int64 print((a_int * a_float).dtype) # float64 print((a_int // a_int).dtype) # int64 print((a_int // a_float).dtype) # float64 print((a_int**a_int).dtype) # int64 print((a_int**a_float).dtype) # float64 

Mรชme dans les opรฉrations entre des entiers ou des nombres ร  virgule flottante, si leurs tailles de bits diffรจrent, le rรฉsultat est converti dans le type avec la taille de bit la plus grande.

a_int16 = np.array([1, 2, 3], np.int16) a_int32 = np.array([1, 2, 3], np.int32) print((a_int16 + a_int32).dtype) # int32 a_float16 = np.array([1, 2, 3], np.float16) a_float32 = np.array([1, 2, 3], np.float32) print((a_float16 + a_float32).dtype) # float32 

Cependant, dans certains cas, le rรฉsultat peut diffรฉrer en termes de type des tableaux d’origine. Pour les processus oรน la taille en bits est cruciale, il est plus sรปr de convertir au type souhaitรฉ avec ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() au prรฉalable.

print((a_int16 + a_float16).dtype) # float32 print((a_int32 + a_float32).dtype) # float64 

Notez que lors de l’attribution de valeurs aux รฉlรฉments, le ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ne change pas.

Par exemple, si un nombre ร  virgule flottante est attribuรฉ ร  un tableau de ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ , le type de donnรฉes ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ reste ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ . La valeur attribuรฉe est tronquรฉe, ce qui supprime la partie dรฉcimale et l’arrondit effectivement vers 0 .

a_int[0] = 10.9 a_int[1] = -20.9 print(a_int) # [ 10 -20 3] print(a_int.dtype) # int64