2016-11-22 3 views
0

Mit diesem Code zu erzeugen ich einige kleine Zahlen in Numpy Array-Format erstellt werden soll:Seltsames Verhalten in Numpy Array mit zufälligen Werten

np.random.seed(1) 
syn0 = 2*np.random.random((315,1))-1 

das gibt mir wie folgt ergeben:

[[-0.16595599] 
[ 0.44064899] 
[-0.99977125] 
[-0.39533485] 
[ 0.70648822] 
[-0.81532281] 
[-0.62747958] 
[ 0.30887855] 
[-0.20646505] 
[ 0.07763347] 
[-0.16161097] 
     . 
     . 
     . 

Aber wenn Ich ändere die Zeilenanzahl auf 316 und höher:

np.random.seed(1) 
syn0 = 2*np.random.random((316,1))-1 

Dann bekomme ich Ergebnisse in Dieses Zahlenformat (Leistungsschreibweise):

[[ -1.65955991e-01] 
[ 4.40648987e-01] 
[ -9.99771250e-01] 
[ -3.95334855e-01] 
[ -7.06488218e-01] 
[ -8.15322810e-01] 
[ -6.27479577e-01] 
[ -3.08878546e-01] 
[ -2.06465052e-01] 
[ 7.76334680e-02] 
[ -1.61610971e-01] 
[ 3.70439001e-01] 
     . 
     . 
     . 

Ich weiß, das ist Power Notation Format, aber warum das passiert? Ich brauche dieses Format nicht.Warum passiert dieses seltsame Verhalten?

+3

Es ist nur eine Darstellung. Nichts in Ihrem Array ändert sich. Warum passiert das? Wahrscheinlich, weil die Verbreitung von Werten wahrscheinlich zunimmt, wenn mehr Proben genommen werden, und es gibt einen Schwellenwert innerhalb der Druckfunktion von numpy. Natürlich können Sie anmerken, wie Sie drucken können, wie Sie möchten. Überlege dir, die Dokumente dafür zu lesen. – sascha

+0

@Sascha: aber wie kann ich echte Werte sehen (im Nicht-Power-Format) – Fcoder

Antwort

2

Sie eine bestimmte Array ohne wissenschaftliche Schreibweise numpy.array2string mit ausdrucken:

print(np.array2string(x, suppress_small=True)) 

standardmäßig nicht wissenschaftliche Schreibweise verwenden für Alle Ausdrucke verwenden numpy.set_printoptions:

np.set_printoptions(suppress=True) 

Was warum dies geschieht - wenn, wenn das Standardverhalten einen Gleitkomma-Array Druck ist wissenschaftliche Notation zu verwenden:

  • das Minimum (absolut ungleich Null) Wert gedruckt werden soll weniger als 0.0001; oder
  • Das Verhältnis des maximalen (absoluten Nicht-Null-) Wertes zum minimalen (absoluten Nicht-Null-) Wertes ist größer als 1000.

Dieses Verhalten unterdrückt, wenn suppress_small-array2string übergeben (oder suppress-set_printoptions)

1

Sie können wissenschaftliche Notation deaktivieren, indem numpy die Druckoptionen zu ändern:

np.set_printoptions(suppress=True) 

syn0 
>>> array([[-0.00083166], 
      [ 0.45717134], 
      [-0.58361112], 
      [-0.50393288], 
      [ 0.70334375], 
      [-0.16830256], 
      [ 0.23337013], 
      [-0.53266772], 
       ....