Wie ordnen Sie Zahlen im Bereich 0; 99 dem Bereich -1,0; 1,0 zu?

8

Also habe ich eine Funktion, die immer eine Zahl aus dem Bereich & lt; 0; 99 & gt; (d. h. 0, 1, ... 99 - ganze Zahlen).

Was wäre der beste Weg, diese Zahlen korrekt in den Bereich & lt; -1.0; 1.0 & gt; zu legen?

0 wäre natürlich -1.0 und 99 wäre 1.0. Wie berechnet man die Zahlen zwischen?

    
Richard Knop 11.11.2010, 13:38
quelle

6 Antworten

21

Verwenden Sie eine lineare Zuordnung:

%Vor%

Wie es funktioniert:

  • Divide by 99: Dies normalisiert den Bereich von [0, 99] bis [0, 1].
  • Mit 2 multiplizieren: Dies erhöht den Bereich auf [0, 2].
  • Subtract 1: Dies ist eine Übersetzung, die [-1, 1].
  • ergibt

Sie können natürlich die Schritte ((x / 99.0) * 2) zu einer einzigen Division kombinieren, wenn Sie möchten. Ich teile es nur für Klarheit.

    
Mark Byers 11.11.2010, 13:40
quelle
14

Skalieren Sie nicht manuell. Man muss viel zu viel auf die Mathematik achten, um herauszufinden, was wirklich beabsichtigt ist. Verwenden Sie eine Hilfsfunktion.

%Vor%

Ich habe festgestellt, dass dies eine der nützlichsten Funktionen in jeder Sprache ist. Sie können sehen, was die scale () -Aufrufe auf einen Blick tun.

    
Glenn Maynard 11.11.2010 14:09
quelle
6

Um einen Wert x aus diesem Bereich abzubilden:

%Vor%

Zu diesem Bereich:

%Vor%

Sie verwenden diese Formel:

%Vor%

Die Funktionsweise eines solchen Mappings ist wie folgt:

%Vor%

Schritt für Schritt:

  1. Sie berechnen zuerst ein Verhältnis von wie weit in a..b der x Wert ist:

    %Vor%

    Dieser Wert liegt zwischen 0 und 1.

  2. Dann verwenden Sie diesen Wert, um zu berechnen, wie weit in a'..b' der Wert liegen sollte:

    %Vor%

In Ihrem speziellen Fall:

%Vor%

oder in vertraglicher Form:

%Vor%

Hinweis : Wenn Sie dies in einer Programmiersprache tun, in der die Ganzzahl dividiert durch eine andere Ganzzahl eine Ganzzahl ist, sollten Sie die Werte in Gleitkommazahlen umwandeln, um Genauigkeitsverluste zu vermeiden:

%Vor%     
quelle
2

Verwenden Sie dies für jeden Bereich (kann auch negativ sein).

[minFrom..maxFrom] - & gt; [minTo..maxTo]

%Vor%     
Pwdr 07.05.2012 22:46
quelle
2

Verwenden Sie numpy , das wäre am effizientesten

%Vor%     
Darshan Chaudhary 14.10.2015 14:15
quelle
-1
%Vor%     
Neil 11.11.2010 13:41
quelle

Tags und Links