Конвертировать ndarray из float64 в целое число - PullRequest
43 голосов
/ 13 января 2012

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

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

Ответы [ 3 ]

61 голосов
/ 13 января 2012

Использование .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])

См. Документацию для получения дополнительных параметров.

6 голосов
/ 24 сентября 2017

Хотя 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 в astype или array по умолчанию будет целочисленным типом по умолчанию, который зависит от вашей платформы. Например, в Windows это будет int32, в 64-битной Linux с 64-битным Python - int64. Если вам нужен определенный целочисленный тип и вы хотите избежать "неоднозначности" платформы, вы должны использовать соответствующие типы NumPy, такие как np.int32 или np.int64.

6 голосов
/ 14 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...