Подтвердить что ты не робот

Преобразование ndarray из float64 в integer

У меня есть ndarray в python с dtype из float64. Я хотел бы преобразовать массив в массив целых чисел. Как мне это сделать?

int() не будет работать, поскольку он говорит, что не может преобразовать его в скаляр. Изменение самого поля dtype, очевидно, не работает, так как фактические байты не изменились. Кажется, я ничего не могу найти в Google или в документации - какой лучший способ сделать это?

4b9b3361

Ответ 1

Используйте .astype.

>>> a = numpy.array([1, 2, 3, 4], dtype=numpy.float64)
>>> a
array([ 1.,  2.,  3.,  4.])
>>> a.astype(numpy.int64)
array([1, 2, 3, 4])

Дополнительную информацию см. в документации.

Ответ 2

Там также очень полезная дискуссия о преобразовании массива на место, Преобразование типа места в массиве NumPy. Если вы беспокоитесь о копировании своего массива (это то, что делает astype()), обязательно проверьте ссылку.

Ответ 3

Хотя astype, вероятно, является "лучшим" вариантом, существует несколько других способов преобразования его в целочисленный массив. Я использую этот arr в следующих примерах:

>>> import numpy as np
>>> arr = np.array([1,2,3,4], dtype=float)
>>> arr
array([ 1.,  2.,  3.,  4.])

Функции int* из NumPy

>>> np.int64(arr)
array([1, 2, 3, 4])

>>> np.int_(arr)
array([1, 2, 3, 4])

Функции NumPy *array сами:

>>> np.array(arr, dtype=int)
array([1, 2, 3, 4])

>>> np.asarray(arr, dtype=int)
array([1, 2, 3, 4])

>>> np.asanyarray(arr, dtype=int)
array([1, 2, 3, 4])

Метод astype (который уже упоминался, но для полноты):

>>> arr.astype(int)
array([1, 2, 3, 4])

Обратите внимание, что передача int, поскольку dtype to astype или array будет по умолчанию использовать целочисленный тип по умолчанию, который зависит от вашей платформы. Например, в Windows это будет int32, на 64-битном Linux с 64-битным Python оно int64. Если вам нужен определенный целочисленный тип и вы хотите избежать "двусмысленности" платформы, вы должны использовать соответствующие типы NumPy, такие как np.int32 или np.int64.