Array mit bestimmter Anzahl an Werten in einem Intervall
Verfasst: Montag 28. April 2014, 19:47
Wenn ich ein Intervall [a,b] habe und ein Array erzeugen möchte, welches mir N Werte gleichen Abstandes in diesem Intervall ausgibt, dann verwende ich normalerweiseden Befehl:
Nun wird damit ein Array erezugt mit Startpunkt a und Endpunkt b, welches aus N Werten besteht, die den gleichen Abstand untereinander haben. Soweit so gut.
Nun habe ich aber den Fall, dass mein Intervall so aussieht: [10^-10, 1]
Wenn ich jetzt den linspace Befehl verwende, habe ich das Problem, dass das erzeugte Array, nicht mehr gleichmäßige Abstande zwischen allen Werten (also auch Startpunkt) hat. Leicht zu sehen an:
Ich habe mir gedanken gemacht und bin zu folgender Lösung gekommen:
Ich öffne also ein Array mit 5N Nullen, öffne dazu 5 Arrays, mit N Werten im jeweiligen Teilintervall und übergebe dann die Werte dieser Arrays in das zuvor geöffnete "leere" Array und erhalte so ein Array, mit (annähernd) gleicher Verteilung von 5N Werten auf dem Intervall [10^-10,1]. Je nach Interesse, wo man wirklich Werte im Intervall braucht, reichen auch 2 oder 3 eilintervalle. Umso mehr Teilintervall umso gleichmäßiger verteilt sind die Werte natürlich über das gesamte Intervall.
Gibt es dafür eine einfachere Lösung oder muss ich das so machen, wenn ich unbedingt Werte haben möchte im Bereich sehr niedriger 10er-Potenzen? Bin über jede Idee dankbar.
Außerdem, wieso funktioniert dann linspace nicht mehr einfach so? Ist 10^-10 eine zu kleine Zahl?
Grüße
Code: Alles auswählen
from numpy import *
x = linspace(a, b, N)
Nun habe ich aber den Fall, dass mein Intervall so aussieht: [10^-10, 1]
Wenn ich jetzt den linspace Befehl verwende, habe ich das Problem, dass das erzeugte Array, nicht mehr gleichmäßige Abstande zwischen allen Werten (also auch Startpunkt) hat. Leicht zu sehen an:
Code: Alles auswählen
from numpy import *
x = linspace(10**-10, 1, 10)
print x
Code: Alles auswählen
from numpy import *
x = zeros(5*N)
a = linspace(10**-10, 10**-8, N)
b = linspace(10**-8, 10**-6, N)
c = linspace(10**-6, 10**-4, N)
d = linspace(10**-4, 10**-2, N)
e = linspace(10**-2, 10**0, N)
for i in range(N):
x[i] = a[i]
x[i+N]=b[i]
x[i+2*N]=c[i]
x[i+3*N]=d[i]
x[i+4*N]=e[i]
Gibt es dafür eine einfachere Lösung oder muss ich das so machen, wenn ich unbedingt Werte haben möchte im Bereich sehr niedriger 10er-Potenzen? Bin über jede Idee dankbar.
Außerdem, wieso funktioniert dann linspace nicht mehr einfach so? Ist 10^-10 eine zu kleine Zahl?
Grüße