2016-09-03 7 views
0

Ich möchte wissen, wie ich die Anzahl der signifikanten Ziffern über das Komma erhöhen kann. Das ursprüngliche "rf" numpy-Array enthält Gleitkommazahlen.Erhöhen Sie die signifikanten Ziffern in Numpy

import numpy as np 
rf=daily_rets(df) 

[ 7.11441183 7.12383509 7.13325787 7.16152716 7.17094994 7.17094994 7.18979692 7.18979692 7.19921923 7.19921923 7.19921923 7.19921923 7.19921923 7.19921923 7.19921923 7.20864296 7.20864296 7.20864296 7.20864296 7.20864296] 

Aber wenn ich die Operation durchführen erhalte ich eine unerwünschte Ausgabe

rf[0:]=(1+rf[0:]/100)**(1/252) 

ich die folgende Ausgabe [1. 1. 1. 1. 1. 1. 1. 1. 1 erhalten. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

np.around() auch nicht mir die gleiche Ausgabe wie oben

rf[0:]=np.around((1+rf[0:]/100)**(1/252), decimals=6) 
hilft geben

Ich weiß, die obige Operation würde die Zahlen sehr klein machen, immer noch möchte ich die Zahlen jenseits von Dezimalzahlen erscheinen

+1

Mögliches Duplikat der [Python division] (http://stackoverflow.com/questions/2958684/python-division) – ayhan

+1

In Python 3 ist dies das Ergebnis, das ich mit '(1 + rf [0:]/100) erhalten habe ** (1/252) 'angewendet auf die ersten vier Elemente:' array ([1.00027276, 1.00027311, 1.00027346, 1.00027451]) 'Ihr Problem liegt an der Division durch ganze Zahlen. Sie können es reparieren, indem Sie floats '(1 + rf [0:]/100.0) ** (1/252.0)' oder mit anderen Methoden in der verknüpften Frage verwenden. – ayhan

+0

Das Problem besteht immer noch. Ich habe versucht, was Sie vorgeschlagen, ich bekomme die gleiche Ausgabe –

Antwort

0

In Python 2.7 Division einer numpy Float durch eine ganze Zahl wird eine ganze Zahl zurückgeben, zumindest das ist meine Erfahrung. Da die Antworten sagen:

In [1]: import numpy as np 

In [2]: rf = np.array([ 7.11441183, 7.12383509, 7.13325787, 7.16152716, 7.17 
    ...: 094994, 7.17094994, 7.18979692, 7.18979692, 7.19921923, 7.19921923, 
    ...: 7.19921923, 7.19921923, 7.19921923, 7.19921923, 7.19921923, 7.208 
    ...: 64296, 7.20864296, 7.20864296, 7.20864296, 7.20864296]) 

In [3]: print (1+rf[0:]/100)**(1/252) 
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 
    1. 1.] 

In [4]: print (1+rf[0:]/100.0)**(1/252.0) 
[ 1.00027276 1.00027311 1.00027346 1.00027451 1.00027486 1.00027486 
    1.00027556 1.00027556 1.00027591 1.00027591 1.00027591 1.00027591 
    1.00027591 1.00027591 1.00027591 1.00027626 1.00027626 1.00027626 
    1.00027626 1.00027626] 

durch einen Schwimmer Dividing löst dieses Problem, das heißt sowohl 100 verändern und 252 bis 100,0 und 252,0. Ich hoffe, das hilft.

0

Sie könnten nur numpy ufuncs verwenden:

from __future__ import division 
import numpy as np 
rf = np.array([7.11441183, 7.12383509, 7.13325787, 7.16152716]) 
np.divide(rf[0:], 100, rf[0:]) 
np.add(rf[0:], 1, rf[0:]) 
np.power(rf[0:], 1/252, rf[0:]) 

>>> rf 
array([ 1.00027276, 1.00027311, 1.00027346, 1.00027451]) 
>>> 

Anfangs dachte ich, numpy würde das Problem behandeln, aber wie andere schon berichtet haben, es ist die ganze Zahl v2.7 Abteilung, die das Problem verursacht. Hoffentlich sind die oben genannten Funktionen nicht zu sehr Distraktor.

+0

Dies enthält immer noch den Ausdruck '1/252', der in Python 2 0 ist. Verwenden Sie Python 3? –

+0

@WarrenWeckesser: Ich habe mich selbst getäuscht, ich hatte '' 'von __future__ import division''' am Anfang meiner temporären Datei. Korrigiert - aber dann sind die Ufuncs strittig. – wwii

Verwandte Themen