Как сообщается в xlwt :
Вот исследование поведения numpy (Python 2.7.3, numpy 1.6.2)
>>> import numpy
>>> data = [t(123456) for t in (numpy.int32, numpy.int64, numpy.float64)]
>>> [type(d) for d in data]
[<type 'numpy.int32'>, <type 'numpy.int64'>, <type 'numpy.float64'>]
>>> data
[123456, 123456, 123456.0]
>>> check_types = (int, long, float)
>>> for d in data:
... for c in check_types:
... print type(d), repr(c), isinstance(d, c)
...
<type 'numpy.int32'> <type 'int'> True
<type 'numpy.int32'> <type 'long'> False
<type 'numpy.int32'> <type 'float'> False
<type 'numpy.int64'> <type 'int'> False
<type 'numpy.int64'> <type 'long'> False
<type 'numpy.int64'> <type 'float'> False
<type 'numpy.float64'> <type 'int'> False
<type 'numpy.float64'> <type 'long'> False
<type 'numpy.float64'> <type 'float'> True
>>>
Похоже, numpy проделал работу, чтобы сделать свои int32 и float64 распознаваемыми другим программным обеспечением, но не int64.
Это правильно - python int может быть 32 или 64 бит (в зависимости от вашего
строить; вы используете 32-битный питон), поэтому либо np.int32, либо np.int64
происходит от этого. np.float32 также не является экземпляром float, потому что
аналогично Python "float" специально хранится с двойной точностью.
(На самом деле даже это глупо, потому что numpy ints _aren't_ экземпляры 'int'
или «плавать», но что угодно.)
isinstance (..., int) - неправильный инструмент для того, что вы пытаетесь сделать. если ты
хотите обнаруживать целые числа в целом, используя типы numpy, самый простой способ
do isinstance (..., np.integer).
В субботу, 26 января 2013 г., в 20:15 Даниэль Вианна написал на [email protected] :
Как сообщается в xlwt https://github.com/python-excel/xlwt/issues/15 :
Вот исследование поведения numpy (Python 2.7.3, numpy 1.6.2)
import numpy >>> data = [t (123456) for t in (numpy.int32, numpy.int64, numpy.float64)] >>> [type (d) for d in data] [
, , ] >>> data [123456, 123456, 123456.0] >>> check_types = (int, long, float) >>> for d in data: ... for c in check_ types: ... print type (d), repr (c), isinstance (d, c) ... Правда Ложь Ложь Ложь Ложь Ложь Ложь Ложь Верно >>> Похоже, numpy сделал работу, чтобы сделать свои int32 и float64
распознается другим программным обеспечением, но не int64.-
Ответьте на это письмо напрямую или просмотрите его на Gi tHubhttps: //github.com/numpy/numpy/issues/2951.
Кроме того, в Python 3 ни один из целочисленных типов Numpy не связан с собственным типом int (который является целым числом переменного размера).
Я думаю, что Натаниэль совершенно прав в своем примечании к исходному отчету. Numpy должен наследовать / регистрировать numbers.Integral
и т. Д., Что хорошо вписывается в отбрасывание python 2.4 и 2.5. Если кто-то хочет широкого признания целочисленных лайков, им в любом случае следует проверять наличие numbers.Integral
(или, может быть, попробовать аналогичный метод, набирающий __index__
).
Начиная с # 4547 и 1.9.0, numpy регистрирует числа с помощью числового модуля. Закрытие как связанное.
Самый полезный комментарий
Это правильно - python int может быть 32 или 64 бит (в зависимости от вашего
строить; вы используете 32-битный питон), поэтому либо np.int32, либо np.int64
происходит от этого. np.float32 также не является экземпляром float, потому что
аналогично Python "float" специально хранится с двойной точностью.
(На самом деле даже это глупо, потому что numpy ints _aren't_ экземпляры 'int'
или «плавать», но что угодно.)
isinstance (..., int) - неправильный инструмент для того, что вы пытаетесь сделать. если ты
хотите обнаруживать целые числа в целом, используя типы numpy, самый простой способ
do isinstance (..., np.integer).
В субботу, 26 января 2013 г., в 20:15 Даниэль Вианна написал на [email protected] :