TypeError generado cuando se utilizan operaciones in situ en matrices numpy?

Si ejecuto el siguiente código:

import numpy as np b = np.zeros(1) c = np.zeros(1) c = c/2**63 print b, c b += c 

Me sale este mensaje de error:

 TypeError: ufunc 'add' output (typecode 'O') could not be coerced to provided output parameter (typecode 'd') according to the casting rule ''same_kind'' 

Si cambio b += c a b = b + c , el código funciona bien. ¿Por que es esto entonces? Estoy ejecutando Python 2.7.2 en RHEL.

Versión NumPy: 2.0.0.dev-a2a9dfb

Versión de GCC: 4.1.2 20080704 (Red Hat 4.1.2-52)

Gracias de antemano.

Cuando haces c=c/2**63 , c convierte en dtype=object (ese es el problema), mientras que b permanece con dtype=float .

Cuando agrega una matriz dtype=object a dtype=float , el resultado es una matriz dtype=object . Piense en ello como dtype precedence, como cuando al agregar un flotador numpy a un numpy int le da un flotante numpy.

Si intenta agregar el object al float en su lugar , falla, ya que el resultado no se puede convertir del object al float . Sin embargo, cuando usas una adición básica como b=b+c , el resultado b se dtype=object un dtype=object , como habrás notado.

Tenga en cuenta que al utilizar c=c/2.**63 mantiene c como flotante y b+=c funciona como se esperaba. Tenga en cuenta que si c fuera np.ones(1) , tampoco tendría un problema.

De todos modos: el (np.array([0], dtype=float)/2**63)).dtype == np.dtype(object) es probablemente un error.