python - matriz numpy, diferencia entre a/= x vs. a=a/x
arrays integer-division (1)
Advertencia:
Las operaciones en el lugar realizarán el cálculo utilizando la precisión decidida por el tipo de datos de los dos operandos, pero descenderán silenciosamente el resultado (si es necesario) para que pueda encajar nuevamente en la matriz. Por lo tanto, para cálculos de precisión mixta,
A {op}= B
puede ser diferente deA = A {op} B
Por ejemplo, supongamos quea = ones((3,3))
. Entonces,a += 3j
es diferente dea = a + 3j
: mientras que ambos realizan el mismo cálculo,a += 3
convierte el resultado para que se ajuste aa
, mientras quea = a + 3j
vuelve a unir el nombre a al resultado.
Dado que su matriz era una matriz de enteros, al usar las operaciones en el lugar, el resultado se reducirá a los enteros nuevamente.
Si cambia su matriz para que almacene los flotadores originalmente, entonces los resultados (que son flotantes) se pueden almacenar en la matriz original, y su código funcionará bien:
>>> a = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
>>> a /= float(2**16 - 1)
>>> a
array([[ 1.52590219e-05, 3.05180438e-05, 4.57770657e-05],
[ 6.10360876e-05, 7.62951095e-05, 9.15541314e-05]])
Estoy usando python 2.7.3, cuando ejecuto el siguiente fragmento de código:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a = a / float(2**16 - 1)
print a
Esto resultará en la siguiente salida:
>> array([[1.52590219e-05, 3.05180438e-05, 4.57770657e-05],
>> [6.10360876e-05, 7.62951095e-05, 9.15541314e-05]])
Exactamente como se esperaba, sin embargo, cuando ejecuto el siguiente fragmento de código:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a /= float(2**16 - 1)
print a
Me sale el siguiente resultado:
>> array([[0, 0, 0],
>> [0, 0, 0]])
Esperaba la misma salida que en el ejemplo anterior, no entiendo las diferentes salidas, que parece ser el resultado de usar a /= float(2**16 - 1)
vs a = a / float(2**16 - 1)
.