2017-07-26 7 views
-3
Aufschneiden

I einfache FormelNumPy ändert den Wert, wenn

beta = covariance[0,1]/covariance[1,1] 

wo Kovarianz

[[ 1.96330748e-05 2.39329295e-05] 
[ 2.39329295e-05 1.05846999e-04]] 

bin mit, wenn ich

covariance[1,1] 

NumPy kehrt ,000105846998912 statt 1.05846999e-04 drucken Ändern des Werts des ursprünglichen Elements in Array, und ich habe dieses Problem nur, wenn ich diese Kovarianz [1,1] -Anweisung ausführen in meinem Terminal. Wenn ich das gleiche Zeug in Jupiter laufe, funktioniert es gut. Kannst du mir helfen?

+5

Die beiden sind gleich. Der einzige Unterschied ist, wie * numpy und Python Fließkommapunkte darstellen. –

+0

ja, aber warum, wenn ich Kovarianz [0,1] mache, bekomme ich 2.39329295e-05 und kann nicht 1.05846999e-04 mit Kovarianz [1,1] bekommen? –

+0

Da Python die wissenschaftliche Notation verwendet, wenn der Wert kleiner als 1e-4 ist. Es ist ziemlich hässlich, 0.000000000011231211414 zu schreiben. –

Antwort

2

0.000105846998912 entspricht 1.05846999e-04.

Einer ist wissenschaftliche Notation und der andere ist nicht.

+0

ja erklären, aber warum, wenn ich Kovarianz [0,1] mache, bekomme ich 2.39329295e-05 und kann nicht 1.05846999e-04 mit Kovarianz [1,1] bekommen. –

1

Die meisten "Fließkomma" sind falsche Fragen beziehen sich auf den Unterschied zwischen der Formatierung und der internen Darstellung eines Fließkommas. Der Computer kann das "formatierte" Gleitkomma nicht genau darstellen.

Zu beachten ist, welche Art von Fließkomma ich verwende, zum Beispiel könnten Sie hier prüfen, ob Sie ein float32 oder float64 Array verwenden. Sie können dies überprüfen, indem Sie eingeben:

covariance.dtype 

Sie können festlegen, die Details, wie die Werte gedruckt mit den set_printoptionsfunction von numpy. Stellen Sie außerdem sicher, dass Sie wissen, wie Gleitkommawerte printed in verschiedenen Python-Versionen sind.

Dies ist, was man ein „reproduzierbar“ Beispiel nennen würde:

import numpy as np 
covariance = np.array(
    [ 
     [1.96330748e-05, 2.39329295e-05], 
     [2.39329295e-05, 1.05846999e-04] 
    ], 
    dtype="double" 
) 
print(covariance[1, 1]) 
print(repr(covariance[1, 1])) 
print("{:.20f}".format(covariance[1, 1])) 

beta = covariance[0, 1]/covariance[1, 1] 
print("{:.20f}".format(beta)) 

# this generates the "wrong" answer you mention in the comments under your answer. 
wrong_beta = covariance[0, 1]/covariance[0, 0] 
print("{:.20f}".format(wrong_beta)) 

Wenn ich es unter jupyter mit python3.5 laufen erhalte ich:

0.000105846999 
0.000105846999 
0.00010584699900000000 
0.22610872038044271815 
1.21901076340828695699 

Wenn ich es unter Python-Konsole ausführen Ich bekomme die gleiche Antwort.

+0

Überprüft, float64, Problem nicht mit Drucken, Problem mit der Formel, wo das gleiche Array unterschiedliche Ergebnisse mit der gleichen Syntax ergibt Beta = Kovarianz [0,1]/Kovarianz [1,1] –

+2

@ArtYudin Sie haben dies tatsächlich nicht gezeigt ... –

Verwandte Themen