el tipo de matriz numpy viene como int32 por defecto en una máquina con Windows 10 de 64 bits

Instalé Anaconda 3 64 bit en mi computadora portátil y escribí el siguiente código en Spyder:

import numpy.distutils.system_info as sysinfo import numpy as np import platform sysinfo.platform_bits platform.architecture() my_array = np.array([0,1,2,3]) my_array.dtype 

La salida de estos comandos muestra lo siguiente:

 sysinfo.platform_bits Out[31]: 64 platform.architecture() Out[32]: ('64bit', 'WindowsPE') my_array = np.array([0,1,2,3]) my_array.dtype Out[33]: dtype('int32') 

Mi pregunta es que aunque mi sistema es de 64 bits, ¿por qué, de forma predeterminada, el tipo de matriz es int32 en lugar de int64?

Cualquier ayuda es apreciada.

Related of "el tipo de matriz numpy viene como int32 por defecto en una máquina con Windows 10 de 64 bits"

El tipo de entero predeterminado np.int_ es C largo:

http://docs.scipy.org/doc/numpy-1.10.1/user/basics.types.html

Pero C long es int32 en win64.

https://msdn.microsoft.com/en-us/library/9c3yd98k.aspx

Esto es una especie de rareza de la plataforma win64.

En Microsoft C, incluso en un sistema de 64 bits, el tamaño del tipo de datos long int es de 32 bits. (Consulte, por ejemplo, https://msdn.microsoft.com/en-us/library/9c3yd98k.aspx ). Numpy hereda el tamaño predeterminado de un número entero del long int del comstackdor de C.

El poster original, Prana, hizo una muy buena pregunta. “¿Por qué el valor predeterminado de enteros está establecido en 32 bits, en una máquina de 64 bits?”

Lo más cerca que puedo decir, la respuesta corta es: “Porque fue diseñado mal”. Parece obvio que una máquina de 64 bits debe definir por defecto un entero en cualquier intérprete asociado como 64 bits. Pero, por supuesto, las dos respuestas explican por qué este no es el caso. Las cosas ahora son diferentes, y por eso les ofrezco esta actualización.

Lo que observo es que tanto para CentOS-7.4 Linux como para MacOS 10.10.5 (lo nuevo y lo viejo), ejecutando Python 2.7.14 (con Numpy 1.14.0), (a partir de enero de 2018), el número entero predeterminado ahora está definido como de 64 bits. (El “my_array.dtype” en el ejemplo inicial ahora reportaría “dtype (‘int64’)” en ambas plataformas.

El uso de enteros de 32 bits como el entero predeterminado en cualquier intérprete puede dar como resultado resultados muy arduos si está haciendo matemáticas de enteros, como señala esta pregunta:

Usando el valor numpy to square da un número negativo

Ahora parece que Python y Numpy se han actualizado y revisado (corregido, se podría argumentar), de modo que para replicar el problema encontrado como se describe en la pregunta anterior, tiene que definir explícitamente la matriz Numpy como int32.

En Python, en ambas plataformas ahora, el número entero predeterminado parece ser int64. Este código funciona igual en ambas plataformas (CentOS-7.4 y MacOSX 10.10.5):

 >>> import numpy as np >>> tlist = [1, 2, 47852] >>> t_array = np.asarray(tlist) >>> t_array.dtype 

dtype('int64')

 >>> print t_array ** 2 

[ 1 4 2289813904]

Pero si hacemos que t_array sea un entero de 32 bits, se obtiene lo siguiente, debido a que el cálculo de enteros pasa sobre el bit de signo en la palabra de 32 bits.

 >>> t_array32 = np.asarray(tlist, dtype=np.int32) >>> t_array32.dtype 

dtype*('int32')

 >>> print t_array32 ** 2 

[ 1 4 -2005153392]

La razón para usar int32 es, por supuesto, la eficiencia. Existen algunas situaciones (como el uso de TensorFlow u otras herramientas de aprendizaje de máquinas de redes neuronales), en las que desea usar representaciones de 32 bits (principalmente flotantes, por supuesto), ya que las ganancias de velocidad en comparación con los flotadores de 64 bits pueden ser bastante significativo.