1. ホーム
  2. python

値の範囲を別の値にマッピングする

2023-08-18 20:57:42

質問

私はPythonで1つの範囲の値を別のものに変換する方法についてのアイデアを探しています。私はハードウェアプロジェクトに取り組んでおり、値の範囲を返すことができるセンサーからデータを読んでいます。

たとえば、センサーが1から512の範囲の値を返し、アクチュエーターが5から10の範囲の値によって駆動されるとします。値と 2 つの範囲を渡して、2 番目の範囲にマッピングされた値を取得できる関数が必要です。もし、そのような関数が translate という名前であれば、このように使うことができます。

sensor_value = 256
actuator_value = translate(sensor_value, 1, 512, 5, 10)

この例では、次のような出力を期待します。 actuator_value7.5 となっているので sensor_value は入力可能な範囲の真ん中にあるからです。

どのように解決するのですか?

一つの解決策としては

def translate(value, leftMin, leftMax, rightMin, rightMax):
    # Figure out how 'wide' each range is
    leftSpan = leftMax - leftMin
    rightSpan = rightMax - rightMin

    # Convert the left range into a 0-1 range (float)
    valueScaled = float(value - leftMin) / float(leftSpan)

    # Convert the 0-1 range into a value in the right range.
    return rightMin + (valueScaled * rightSpan)

読みやすさを犠牲にして、より効率的にするために代数を使うことができるかもしれません。