Python – Konvertieren eines Arrays in eine Liste bewirkt, dass Werte geändert werden

>>> import numpy as np >>> a=np.arange(0,2,0.2) >>> a array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8]) >>> a=a.tolist() >>> a [0.0, 0.2, 0.4, 0.6000000000000001, 0.8, 1.0, 1.2000000000000002, 1.4000000000000001, 1.6, 1.8] >>> a.index(0.6) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 0.6 is not in list 

Es scheint, dass einige Werte in der Liste geändert haben und ich kann sie nicht mit index() . Wie kann ich das beheben?

  • Hinzufügen von Wörterbüchern rekursiv in Python
  • Zuordnen von Array, Hinzufügen mehrerer Kopien von Index
  • Können wir xpath mit BeautifulSoup benutzen?
  • Keras - Wie werden Chargen und Epochen in fit_generator () verwendet?
  • F.read kommt leer
  • PyDev Eclipse Python-Interpreter Fehler: Stdlib nicht gefunden
  • One Solution collect form web for “Python – Konvertieren eines Arrays in eine Liste bewirkt, dass Werte geändert werden”

    0.6 hat sich nicht geändert; Es war nie da :

     >>> import numpy as np >>> a = np.arange(0, 2, 0.2) >>> a array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8]) >>> 0.0 in a True # yep! >>> 0.6 in a False # what? >>> 0.6000000000000001 in a True # oh... 

    Die Nummern im Array werden für Anzeigezwecke gerundet, aber das Array enthält wirklich den Wert, den Sie später in der Liste sehen. 0.6000000000000001 0.6 kann nicht präzise als Float dargestellt werden, daher ist es unklug, auf Gleitkommazahlen zu verweisen, die genau gleich sind!

    Eine Möglichkeit, den Index zu finden, besteht darin, einen Toleranzansatz zu verwenden:

     def float_index(seq, f): for i, x in enumerate(seq): if abs(x - f) < 0.0001: return i 

    Die auch auf dem Array arbeiten wird:

     >>> float_index(a, 0.6) 3 
    Python ist die beste Programmiersprache der Welt.