比率を維持しながら数値範囲を別の範囲に変換する 質問する

比率を維持しながら数値範囲を別の範囲に変換する 質問する

比率を維持しながら、ある範囲の数値を別の範囲の数値に変換しようとしています。数学は得意ではありません。

ポイント値が -16000.00 から 16000.00 の範囲にある画像ファイルがありますが、通常の範囲はこれよりずっと小さい可能性があります。私がやりたいのは、これらの値を 0 から 100 までの整数範囲に圧縮することです。ここで、0 は最小ポイントの値、100 は最大ポイントの値です。その間にあるすべてのポイントは、精度が多少失われても相対比率を維持する必要があります。私はこれを Python で行いたいのですが、一般的なアルゴリズムでも十分でしょう。最小/最大またはいずれかの範囲を調整できるアルゴリズムが望ましいです (つまり、2 番目の範囲は 0 から 100 ではなく -50 から 800 にすることができます)。

ベストアンサー1

NewValue = (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin

または、もう少し読みやすくするには:

OldRange = (OldMax - OldMin)  
NewRange = (NewMax - NewMin)  
NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin

または、古い範囲が 0 ( OldMin = OldMax )の場合を保護したい場合:

OldRange = (OldMax - OldMin)
if (OldRange == 0)
    NewValue = NewMin
else
{
    NewRange = (NewMax - NewMin)  
    NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin
}

この場合、新しい範囲の値の1つを任意に選択する必要があることに注意してください。状況に応じて、適切な選択は次のようになります。NewMin(サンプルを参照)、NewMaxまたは(NewMin + NewMax) / 2

おすすめ記事