Seite 1 von 1

Intervall auf [-pi,pi] abbilden

Verfasst: Montag 18. November 2019, 12:54
von Leonie92
Hallo zs,

gibt es eine einfache Methode um Werte in einem beliebigen Intervall, z.B.

Code: Alles auswählen

x = np.array([-6,-5,-4,-3,-2,-1,0,1,2,3,5,6])
auf das Intervall in [-pi,pi] abzubilden.

Um x auf [0,2pi] abzubilden, muss man einfach nur

Code: Alles auswählen

x % (2*np.pi)
verwenden. Ich frage mich, ob es eine ähnlich einfache Methode für die Abbildung in [-pi,pi] gibt.

Re: Intervall auf [-pi,pi] abbilden

Verfasst: Montag 18. November 2019, 13:17
von ThomasL
Deinem Modulo Code kann ich nicht folgen.

Code: Alles auswählen

import numpy as np

x = np.array([-6,-5,-4,-3,-2,-1,0,1,2,3,5,6])

def remap(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

remap(x, min(x), max(x), -np.pi, np.pi)

"""
array([-3.14159265, -2.61799388, -2.0943951 , -1.57079633, -1.04719755,
       -0.52359878,  0.        ,  0.52359878,  1.04719755,  1.57079633,
        2.61799388,  3.14159265])
"""

Re: Intervall auf [-pi,pi] abbilden

Verfasst: Montag 18. November 2019, 13:22
von ThomasL
Man kann die Ermittlung des min und max Wertes der Eingabewerte natürlich in die Funktion packen

Code: Alles auswählen

def remap(x, out_min, out_max):
    in_min = min(x)
    return (x - min(x)) * (out_max - out_min) / (max(x) - min(x)) + out_min

print(remap(x, -np.pi, np.pi))

# [-3.14159265 -2.61799388 -2.0943951  -1.57079633 -1.04719755 -0.52359878
#   0.          0.52359878  1.04719755  1.57079633  2.61799388  3.14159265]

Re: Intervall auf [-pi,pi] abbilden

Verfasst: Montag 18. November 2019, 13:28
von Leonie92
Danke für die schnelle Antwort. In deinem Code ist ein Fehler.

Die gesuchte Abbildung sollte die Werte -3,-2,-1,1,2,3 unverändert lassen, da diese bereits im Intervall [-pi,pi] liegen.

In deiner Lösung tauchen die Werte nicht mehr auf.

-------------------------------------------------------------------------------------------------

Code: Alles auswählen

x = array([-6,-5,-4,-3,-2,-1,0,1,2,3,5,6])
x % (2*pi) 

--> array([0.28318531, 1.28318531, 2.28318531, 3.28318531, 4.28318531,
       5.28318531, 0.        , 1.        , 2.        , 3.        ,
       5.        , 6.        ]) 
Wie oben beschrieben, wird das Intervall x durch die Modulo-Operation auf [0,2pi] abgebildet.

Re: Intervall auf [-pi,pi] abbilden

Verfasst: Montag 18. November 2019, 13:35
von ThomasL
Mein Beispielcode nimmt eine "Abbildung" der Werte eines Intervalls auf ein anderes Intervall vor.
Das was du willst ist keine "Abbildung".

Re: Intervall auf [-pi,pi] abbilden

Verfasst: Montag 18. November 2019, 14:09
von __blackjack__
@ThomasL: Kommt auf die Definition von Abbildung an. In der Mathematik ist eigentlich alles eine Abbildung was Werte aus einer Menge in einen anderen Menge abbildet, also auch das was Leonie92 da machen will. Abbildungen müssen nicht bijektiv sein — das heisst es ist nicht zwingend vorausgesetzt das man aus dem Ergebnis auch wieder eindeutig auf die Ausgangsmenge zurück abbilden kann.

Re: Intervall auf [-pi,pi] abbilden

Verfasst: Montag 18. November 2019, 14:24
von ThomasL
@__blackjack__ Stimmt. Was auch immer sie will, es ist keine "lineare" Abbildung eines Intervalls auf ein anderes. Und diese Angabe fehlte.