web-dev-qa-db-fra.com

Remplacez les zéros dans un tableau d'entiers NumPy par nan

J'ai écrit un script python ci-dessous:

import numpy as np

arr = np.arange(6).reshape(2, 3)
arr[arr==0]=['nan']
print arr

Mais j'ai eu cette erreur:

Traceback (most recent call last):
  File "C:\Users\Desktop\test.py", line 4, in <module>
    arr[arr==0]=['nan']
ValueError: invalid literal for long() with base 10: 'nan'
[Finished in 0.2s with exit code 1]

Comment remplacer des zéros dans un tableau NumPy par nan?

15
Heinz

np.nan a le type float: les tableaux qui le contiennent doivent également avoir ce type de données (ou le type de données complex ou object), vous devrez donc peut-être transtyper arr avant vous essayez d'attribuer cette valeur.

L'erreur se produit car la valeur de chaîne 'nan' ne peut pas être converti en un type entier pour correspondre au type de arr.

>>> arr = arr.astype('float')
>>> arr[arr == 0] = 'nan' # or use np.nan
>>> arr
array([[ nan,   1.,   2.],
       [  3.,   4.,   5.]])
32
Alex Riley