Soy nuevo en python y numpy así que discúlpeme si este problema es tan rudimentario. Tengo una matriz de valores negativos (es clasificada):Long (> 20million element) suma de matriz en python numpy
>>>neg
[ -1.53507843e+02 -1.53200012e+02 -1.43161987e+02 ..., -6.37326136e-1 -3.97518490e-10 -3.73480691e-10]
>>>neg.shape
(12922508,)
tengo que añadir esta matriz a su duplicado (pero con valores positivos) para encontrar la desviación estándar de la distribución promediada a cero. Así que hago lo siguiente:
>>>pos=-1*neg
>>>pos=pos[::-1] #Just to make it look symmetric for the display bellow!
>>>total=np.hstack((neg,pos))
>>>total
[-153.50784302 -153.20001221 -143.1619873 ..., 143.1619873 153.20001221 153.50784302]
>>>total.shape
(25845016,)
Hasta ahora todo es muy bueno, pero lo extraño es que la suma de esta nueva matriz no es cero:
>>>numpy.sum(total)
11610.6
también la desviación estándar no es en todo lo que esperaba, pero creo que la raíz de ese problema es la misma: ¿por qué la suma no da como resultado cero?
Cuando aplico este método a una pequeña matriz; por ejemplo [-5, -3, -2] la suma se convierte en cero. Así que supongo que el problema radica en la longitud de la matriz (más de 20 millones de elementos). ¿Hay alguna forma de lidiar con este problema?
Si alguien pudiera ayudarme con esto, estaría muy agradecido.
¿'math.fsum (total)' devuelve '0'? – jfs
Sí lo hace !!! ¡¡¡GUAU!!! ¿Quieres decir que no debería haber usado numpy en absoluto, estaba en la idea errónea de que Numpy es la mejor herramienta para trabajar en matrices !!! Pero al buscar en http://docs.python.org/py3k/library/math.html#module-math, no veo ninguna herramienta para calcular la Desviación estándar. ¿Qué propones? – makhlaghi
No. 'fsum()' es solo para una verificación de cordura que su código no tiene otro error que no sea perder precisión durante la suma. ['numpy.std()'] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html) podría usarse para la Desviación estándar. Pruebe 'np.std (total, dtype = np.float64)'. – jfs