En una matriz numpy , ¿por qué puedo usar / 2 con éxito?
>>> a=np.array([2, 4, 6]) >>> a = a / 2 >>> a array([ 1., 2., 3.]) Pero no puedo usar a /= 2 ?
>>> a=np.array([2, 4, 6]) >>> a /= 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: No loop matching the specified signature and casting was found for ufunc true_divideHe visto el problema numpy 6464 , pero no entiendo al leerlo y las notas de la versión vinculadas la razón por la que esto no funciona.
¿Hay alguna forma de hacer que /= funcione como se esperaba?
Como se señaló en el comentario, el cambio de int (que es cómo se crea a ) a float (que es el resultado de /) no está permitido cuando se usa /= . Para "arreglar" esto, el dtype de a solo tiene que ser un flotante desde el principio:
a=np.array([2, 4, 6], dtype=np.float64) a/=2 print(str(a)) >>>array([1., 2., 3.])Como se menciona en los comentarios, a / 2 produce una matriz flotante, pero el tipo de a es entero. Dado que los operadores de asignación de NumPy están optimizados para reutilizar la misma matriz (es decir, a = a + 2 y a += 2 no son exactamente iguales, el primero crea una nueva matriz mientras que el segundo simplemente reutiliza la existente), no puede usar ellos cuando el resultado tiene un dtype diferente. Si lo que quieres es una división de enteros, puedes usar la operación de asignación //= :
>>> a = np.array([2, 4, 6]) >>> a //= 2 >>> a array([1, 2, 3])