2016-07-01 11 views
3


Ich habe ein Problem bei der Verwendung von numpy vstack für Float-Werte mit Exponent e-5.
Sowohl item_array als auch date_array sind numpy.darray.
Wenn ich data = np.vstack ((date_array, item_array)), das Element 3.04871703e-05 zu 3,0487170344 werden. Andere Elemente sind gut. Kann mir jemand helfen, dieses Problem zu beheben? Dank
float-Werte Fehler nach numpy vstack

In [2]: item_array
Out [2]:
Array ([0.00000000e + 00, -1.81992510e-03, -9.44964473e-03,
-3.12464669e-03, - 5.42864845e-03, -1.67769866e-03,
3.04871703e-05, -7.81295968e-03, -1.12972557e-02,
-1.69797339e-02, -1.22161657e-02, -1.93931514e- 02,
-1.11389637e-02, -7.59505250e-03, 5.65141213e-03,
4.81559901e-03, -1.37724956e-02, -1.51201763e-02,
-2.55894748e-02, -2.48333169e-02, -2.56770574e-02,
-3.21192961e-02, -2.71028609e-02, -2.84357450e-02])

In [3]: date_array
Aus [3]:
array (['"2016-05-03"', '"2016-05-04"', '"2016-05-05"', '"2016-05-06" ',
' "2016-05-07" ',' "2016-05-08" ',' "2016-05-09" ',' "2016-05-10" ',
' "2016- 05-11 "','" 2016-05-12 '', '"2016-05-13"', '"2016-05-14"',
'"2016-05-15"', '" 2016-05-16 "','" 2016-05-17 "','" 2016-05-18 "',
'" 2016-05-19 '', '"2016-05-20' ', '"2016-05-21"', '"2016-05-22"',
'"2016-05-23"', '"2016-05-24"', "" 2016-05-25 "'," "2016-05-26"'],
dtype = '| S12 ')

In [4]: ​​data = np.vstack ((date_arry, item_array))

in [5]: Daten
Out [5]:
Array ([[' "2016- 05-03 "','" 2016-05-04 '', '"2016-05-05"', '"2016-05-06"',
'"2016-05-07"', '" 2016-05-08 "','" 2016-05-09 "','" 2016-05-10 '',
'"2016-05-11"', '"2016-05-12"', '"2016-05-13"', '"2016-05-14"',
'"2016-05-15"', '"2016-05-16"', '"2016-05-17" "," "2016-05-18" ',
' "2016-05-19" ',' "2016-05-20" ',' "2016-05-21" ',' "2016-05-22" ' ,
'"2016-05-23"', '"2016-05-24"', '"2016-05-25"', '"2016-05-26"'],
['0.0' , '-0,001819925', '-0,009449644', '-0,003124646',
'-0,005428648', '-0,001677698', '3,0487170344', '-0,007812959',
'-0,011297255', '-0,016979733' '-,012216165', '-,019393151',
'-,011138963', '-,007595052', '0,0056514121', '0,0048155990',
'-,013772495', '-,015120176', '-,025589474', ‚- 0.024833316 ',
' -0.025677057 ',' -0. 032119296 ',' -0.027102860 ',' -0.028435744 ']],
dtype =' | S12')

+1

Ist das nicht nur ein Display-Problem, aber die tatsächlichen zugrunde liegenden Werte sind immer noch wie erwartet? – EdChum

+0

Checkout https://docs.python.org/2/tutorial/floatingpoint.html kann nützlich sein. –

+1

In Ihrem Fall ist der Dtype S12, also könnten die letzten Einträge einfach weggeschnitten werden? Wenn es S32 ist, kann ich immer noch die e-5 sehen. Ich kann deinen Weg nicht reproduzieren, wenn ich genau dasselbe mache, habe ich am Ende ein numpy Array mit dtype = '| S32' – Sosel

Antwort

1

Ich schrieb das Skript wie folgt aus:

import numpy as np 

item_array = np.array([0.00000000e+00, -1.81992510e-03, -9.44964473e-03, 
         -3.12464669e-03, -5.42864845e-03, -1.67769866e-03, 
         3.04871703e-05, -7.81295968e-03, -1.12972557e-02, 
         -1.69797339e-02, -1.22161657e-02, -1.93931514e-02, 
         -1.11389637e-02, -7.59505250e-03, 5.65141213e-03, 
         4.81559901e-03, -1.37724956e-02, -1.51201763e-02, 
         -2.55894748e-02, -2.48333169e-02, -2.56770574e-02, 
         -3.21192961e-02, -2.71028609e-02, -2.84357450e-02]) 

date_array = np.array(['"2016-05-03"', '"2016-05-04"', '"2016-05-05"', '"2016-05-06"', 
         '"2016-05-07"', '"2016-05-08"', '"2016-05-09"', '"2016-05-10"', 
         '"2016-05-11"', '"2016-05-12"', '"2016-05-13"', '"2016-05-14"', 
         '"2016-05-15"', '"2016-05-16"', '"2016-05-17"', '"2016-05-18"', 
         '"2016-05-19"', '"2016-05-20"', '"2016-05-21"', '"2016-05-22"', 
         '"2016-05-23"', '"2016-05-24"', '"2016-05-25"', '"2016-05-26"']) 

data = np.vstack((date_array,item_array)) 

print data 

Und ich bekomme ein gutes Ergebnis:

[['"2016-05-03"' '"2016-05-04"' '"2016-05-05"' '"2016-05-06"' 
    '"2016-05-07"' '"2016-05-08"' '"2016-05-09"' '"2016-05-10"' 
    '"2016-05-11"' '"2016-05-12"' '"2016-05-13"' '"2016-05-14"' 
    '"2016-05-15"' '"2016-05-16"' '"2016-05-17"' '"2016-05-18"' 
    '"2016-05-19"' '"2016-05-20"' '"2016-05-21"' '"2016-05-22"' 
    '"2016-05-23"' '"2016-05-24"' '"2016-05-25"' '"2016-05-26"'] 
['0.0' '-0.0018199251' '-0.00944964473' '-0.00312464669' '-0.00542864845' 
    '-0.00167769866' '3.04871703e-05' '-0.00781295968' '-0.0112972557' 
    '-0.0169797339' '-0.0122161657' '-0.0193931514' '-0.0111389637' 
    '-0.0075950525' '0.00565141213' '0.00481559901' '-0.0137724956' 
    '-0.0151201763' '-0.0255894748' '-0.0248333169' '-0.0256770574' 
    '-0.0321192961' '-0.0271028609' '-0.028435745']] 

Wenn Sie don schreibe dtype, sollte es gut funktionieren;)

+1

Ich sehe nichts anderes in Ihrem. Was ist der 'dtype' von deinem' date_array'? Vom Stapel? Das OP zeigte das 'repr'-Array, das den' dtype' (und Kommas) enthält. Es gibt ein anderes Problem. – hpaulj

+0

Ich ändere den Typ von item_array von Float zu String '| S32', dann funktioniert es. Vielen Dank. In [2]: type (item_array [0]) Out [2]: numpy.float64 In [3]: item_array = item_array.astype ('| S32') In [4]: ​​type (item_array [0]) Aus [4]: ​​numpy.string_ – Peter