<p>numpy.int64 não é uma instância de int</p>

Criado em 27 jan. 2013  ·  4Comentários  ·  Fonte: numpy/numpy

Conforme relatado em xlwt :

Aqui está um exame do comportamento entorpecido (Python 2.7.3, entorpecido 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
>>>

Parece que o numpy fez o trabalho necessário para tornar int32 e float64 reconhecíveis por outro software, mas não int64.

Proposal numpy.core

Comentários muito úteis

Isso está correto - python 'int' é de 32 ou 64 bits (dependendo do seu
construir; você está usando um python de 32 bits), então np.int32 ou np.int64
deriva dele. np.float32 não é uma instância de 'float', também, porque
da mesma forma, Python 'float' é especificamente armazenado em precisão dupla.

(Realmente, mesmo isso é bobo, porque ints numpy _não_ instâncias de 'int'
ou 'flutuar', mas tanto faz.)

isinstance (..., int) é a ferramenta errada para o que você está tentando fazer. Se você
deseja detectar inteiros em geral usando tipos numpy, a coisa mais simples de
fazer é isinstance (..., np.integer).

No sábado, 26 de janeiro de 2013 às 20h15, Daniel Vianna [email protected] :

Conforme relatado em xlwt https://github.com/python-excel/xlwt/issues/15 :

Aqui está um exame do comportamento entorpecido (Python 2.7.3, entorpecido 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) >>> para d em dados: ... for c em check_ types: ... print type (d), repr (c), isinstance (d, c) ...VerdadeFalsoFalsoFalsoFalsoFalsoFalsoFalsoVerdadeiro >>>

Parece que numpy fez o trabalho de fazer seu int32 e float64
reconhecível por outro software, mas não int64.

-
Responda a este e-mail diretamente ou visualize-o em Gi tHubhttps: //github.com/numpy/numpy/issues/2951.

Todos 4 comentários

Isso está correto - python 'int' é de 32 ou 64 bits (dependendo do seu
construir; você está usando um python de 32 bits), então np.int32 ou np.int64
deriva dele. np.float32 não é uma instância de 'float', também, porque
da mesma forma, Python 'float' é especificamente armazenado em precisão dupla.

(Realmente, mesmo isso é bobo, porque ints numpy _não_ instâncias de 'int'
ou 'flutuar', mas tanto faz.)

isinstance (..., int) é a ferramenta errada para o que você está tentando fazer. Se você
deseja detectar inteiros em geral usando tipos numpy, a coisa mais simples de
fazer é isinstance (..., np.integer).

No sábado, 26 de janeiro de 2013 às 20h15, Daniel Vianna [email protected] :

Conforme relatado em xlwt https://github.com/python-excel/xlwt/issues/15 :

Aqui está um exame do comportamento entorpecido (Python 2.7.3, entorpecido 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) >>> para d em dados: ... for c em check_ types: ... print type (d), repr (c), isinstance (d, c) ...VerdadeFalsoFalsoFalsoFalsoFalsoFalsoFalsoVerdadeiro >>>

Parece que numpy fez o trabalho de fazer seu int32 e float64
reconhecível por outro software, mas não int64.

-
Responda a este e-mail diretamente ou visualize-o em Gi tHubhttps: //github.com/numpy/numpy/issues/2951.

Além disso, no Python 3, nenhum dos tipos inteiros de Numpy está relacionado ao tipo int nativo (que é um inteiro de tamanho variável).

Acho que Nathaniel está completamente correto em sua nota sobre o relatório original. O Numpy deve herdar / registrar numbers.Integral etc., o que se encaixa bem na eliminação do python 2.4 e 2.5. Se alguém quiser um amplo reconhecimento de curtidas de inteiros, deve verificar se há numbers.Integral (ou talvez tente o método semelhante de pato digitando __index__ ) de qualquer maneira.

A partir de # 4547 e 1.9.0, numpy registra números com o módulo de número. Fechando isso conforme relacionado.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

marcocaccin picture marcocaccin  ·  4Comentários

amuresan picture amuresan  ·  4Comentários

keithbriggs picture keithbriggs  ·  3Comentários

Foadsf picture Foadsf  ·  3Comentários

'
Pezhvuk picture Pezhvuk  ·  4Comentários