1. ホーム
  2. python

[解決済み] 比率を維持したまま、数値範囲を別の範囲に変換する。

2022-03-17 04:46:48

質問

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

私は画像ファイルを持っていて、点線の値は-16000.00から16000.00の範囲にありますが、典型的な範囲はもっと低いかもしれません。私がしたいことは、これらの値を0-100の整数範囲に圧縮することです。この間のすべての点は、いくらかの精度が失われても、相対的な比率を保つ必要があります。私は、最小/最大またはどちらかの範囲を調整できるアルゴリズムを希望します(例えば、2番目の範囲は0〜100の代わりに-50〜800にすることができます)。

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

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
}

この場合、新しい範囲の値を任意に選ぶことを余儀なくされることに注意してください。文脈によっては、以下のような選択が可能である。 NewMin ( サンプルを見る ), NewMax または (NewMin + NewMax) / 2