Преобразование массива чисел с плавающей точкой в ​​целые числа, заменяя значения NaN - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть массив чисел float64, который содержит значения, а также NaN:

[[ 5. nan nan nan nan nan nan nan nan nan nan nan nan]
 [nan  6. nan nan nan nan nan nan nan nan nan nan nan]
 [nan  7.  5. nan nan nan nan nan nan nan nan nan nan]
 [nan nan nan  7. nan nan nan nan nan nan nan nan nan]
 [nan nan nan nan  4. nan nan nan nan nan nan nan nan]
 [nan nan nan nan  5.  3. nan nan nan nan nan nan nan]
 [nan nan nan nan nan nan nan nan nan nan nan nan nan]
 [ 1. nan nan nan nan nan nan  4. nan nan nan nan nan]
 [nan nan nan nan nan nan  7. nan nan nan nan nan nan]
 [nan nan nan nan nan nan nan nan nan  7. nan nan nan]
 [nan nan nan nan nan nan  7. nan  7. nan  6. nan nan]
 [nan nan nan nan nan nan nan nan nan nan nan  7. nan]
 [nan nan nan nan nan nan nan  6. nan nan nan nan  5.]]

Я хочу преобразовать все числа в целые числа, но np.round или np.around не работает тихо, кажется, делает работу,Кроме того, я не могу изменить тип массива, потому что массивы целочисленных типов не поддерживают "nan's".Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Для преобразования NaN в ноль: numpy.nan_to_num(arr), работает как с массивами, так и с отдельными значениями.(Используйте аргумент ..., copy=False, чтобы избежать потери памяти, т. Е. Работать на месте.)

Таким образом, чтобы выполнить замену NaN, а затем преобразование типа: numpy.nan_to_num(arr).astype(np.int)

from numpy import array, nan
arr = np.array([[5., nan, nan], [nan, 6., nan], [nan, 7., 5.]])

arr = np.nan_to_num(arr, copy=False).astype(np.int)
array([[5, 0, 0],
       [0, 6, 0],
       [0, 7, 5]])

Чтобы преобразовать NaN в любое другое определенное значение: Вы не сказали, на какое значение хотите заменить NaN.Если вы хотите заменить значение, отличное от нуля, вам нужно сделать это с помощью логического индексирования: arr[np.isnan(arr)] = -99 затем .astype(np.int).

0 голосов
/ 10 декабря 2018

Вопрос в том, к какому значению они должны быть преобразованы?

Допустим, этот массив имеет имена x, тогда:

x[np.isnan(x)] = 0 # value you want to replace NaN with

И теперь вы можете преобразовать вашиданные в целые числа так, как вы хотели.

...