len(np.array) hängt von dem Inhalt ab ... ?

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
HoWei
User
Beiträge: 12
Registriert: Freitag 28. Juni 2019, 10:18

Ich erzeuge ein array mit np.arange() und je nach Grössenordnung der Daten ändert sich die Array-Länge - ich glaube das sollte nicht so sein.
Kann das bitte jemand bestätigen oder mir meinen Fehler aufzeigen ?

Hier das Beispiel (ich erwarte, dass die Länge des Arrays in jedem Fall 1000 ist):

Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import numpy as np
>>> print(np.__version__)
1.16.4
>>>
>>> myarray=np.arange(0,1000,1)
>>> len(myarray)
1000
>>> myarray=np.arange(0, 1.6e-6*1000, 1.6e-6)
>>> len(myarray)
1000
>>> myarray=np.arange(0, 1.6e-7*1000, 1.6e-7)
>>> len(myarray)
1001
>>> #WTF ?
...
>>> myarray=np.arange(0, 1.6e-8*1000, 1.6e-8)
>>> len(myarray)
1001
>>> #WTF ?
...
>>> myarray=np.arange(0, 1.6e-9*1000, 1.6e-9)
>>> len(myarray)
1000
>>> #WHAT IS WRONG WITH THIS ARRAY LENGTH ?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du bekommst halt rundungsfehler. Und dadurch ändert sich die Länge. Willkommen in der wunderbaren Welt von IEEE754.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

@HoWei: dafür ist arange nicht gedacht, nimm statt dessen linspace.
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

https://docs.scipy.org/doc/numpy/refere ... range.html
numpy.arange([start, ]stop, [step, ]dtype=None)
Return evenly spaced values within a given interval.

Values are generated within the half-open interval [start, stop) (in other words, the interval including start but excluding stop). For integer arguments the function is equivalent to the Python built-in range function, but returns an ndarray rather than a list.

When using a non-integer step, such as 0.1, the results will often not be consistent. It is better to use numpy.linspace for these cases.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
HoWei
User
Beiträge: 12
Registriert: Freitag 28. Juni 2019, 10:18

Danke - mit "np.linspace()" funktionierts wunderbar !
Problem gelöst!
Antworten