2011-04-19 16 views
13

¿Hay alguna manera de establecer limpia numpy utilizar Float32 valores en lugar de float64 a nivel mundial?Python: Hacer numpy por defecto a float32

+2

Muy relacionado: http://stackoverflow.com/questions/5350342/can-i-set-float128-as-the-standard-float-array-in-numpy/5351486 –

+3

También una interesante discusión en scipy list: http://old.nabble.com/switching-to-float32-ts24203533.html#a24203533 – joris

+0

vi la conversación nabble pero se perdió el float128 (gracias Sven), y parece que ambos están diciendo lo mismo: 'No, realmente no'. En la discusión de Nabble, se mencionaba agregarlo al libro de cocina, lo que sería bueno. Yo mismo acabo de hacer unos pocos hacks similares a los de la pregunta float128 mencionada (y respondida). Piedad – Bolster

Respuesta

7

No es que yo sepa. O necesita especificar el tipo de forma explícita cuando llama al constructor para cualquier arreglo, o lanzar un arreglo a float32 (use el método ndarray.astype) antes de pasarlo a su código de GPU (supongo que esto es a lo que se refiere la pregunta?) Si realmente te preocupa el caso de GPU, prefiero este último: puede ser muy molesto tratar de mantener todo en una sola precisión sin una comprensión extremadamente minuciosa de las reglas de difusión numpy y un código muy cuidadosamente diseñado.

Otra alternativa podría ser crear sus propios métodos que sobrecarguen los constructores numpy estándar (por lo tanto, numpy.zeros, numpy.ones, numpy.empty). Eso debería estar muy cerca de mantener todo en float32.

+0

Eso es lo que estoy haciendo para el caso de la GPU, pero yo estaba preocupado por comparación directa entre depende de la CPU precisión de cálculo equivalente para las pruebas, como parte de un 'extraño-bug-caza' – Bolster

+0

¿Este comentario sigue siendo válida relativa a las normas de radiodifusión ? Si las matrices se declaran con 'dtype'' float32', ¿existe algún riesgo en las conversiones implícitas o la difusión? – Chiel