Array mit bestimmter Anzahl an Werten in einem Intervall

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
alex2007
User
Beiträge: 40
Registriert: Montag 14. April 2014, 10:08

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:

Code: Alles auswählen

from numpy import *

x = linspace(a, b, N)
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:

Code: Alles auswählen

from numpy import *

x = linspace(10**-10, 1, 10)
print x
Ich habe mir gedanken gemacht und bin zu folgender Lösung gekommen:

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]
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
Sirius3
User
Beiträge: 8409
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 28. April 2014, 20:05

@alex2007: die Werte sind bei `linspace(10**-10, 1, N)` natürlich linear verteilt. Was Du da produzierst so ziemlich willkürlich. Was Du vielleicht eher willst ist eine logarithmische Verteilung `10**numpy.linspace(-10,0,N)`.
alex2007
User
Beiträge: 40
Registriert: Montag 14. April 2014, 10:08

Montag 28. April 2014, 20:16

@sirius3: ja, das wäre die optimale lösung mrines problems. Mit meinen teilintervallrn habe ich zwar auch das ganze Intervall abgedeckt, aber eben umständlich und wie du eben sagst recht willkürlich. Danke für deine hilfe.
Antworten