第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數(shù)字范圍轉(zhuǎn)換為另一個范圍,保持比率

將數(shù)字范圍轉(zhuǎn)換為另一個范圍,保持比率

慕神8447489 2019-09-18 11:06:48
我正在嘗試將一個數(shù)字范圍轉(zhuǎn)換為另一個數(shù)字,保持比率。數(shù)學不是我的強項。我有一個圖像文件,其中點值可能在-16000.00到16000.00之間,盡管典型范圍可能要小得多。我想要做的是將這些值壓縮到整數(shù)范圍0-100,其中0是最小點的值,100是最大值的值。中間的所有點都應(yīng)該保持相對比率,即使丟失了一些精度我想在python中這樣做,但即使是一般算法也應(yīng)該足夠。我更喜歡一種算法,其中可以調(diào)整最小值/最大值或任一范圍(即,第二范圍可以是-50到800而不是0到100)。
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

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

}

請注意,在這種情況下,我們不得不隨意選擇一個可能的新范圍值。根據(jù)上下文,明智的選擇可能是:NewMin(見樣本),NewMax或(NewMin + NewMax) / 2


查看完整回答
反對 回復 2019-09-18
?
浮云間

TA貢獻1829條經(jīng)驗 獲得超4個贊

這是一個簡單的線性轉(zhuǎn)換。


new_value = ( (old_value - old_min) / (old_max - old_min) ) * (new_max - new_min) + new_min

因此,在-16000到16000的范圍內(nèi)將10000轉(zhuǎn)換為0到100的新范圍,可以得到:


old_value = 10000

old_min = -16000

old_max = 16000

new_min = 0

new_max = 100


new_value = ( ( 10000 - -16000 ) / (16000 - -16000) ) * (100 - 0) + 0

          = 81.25


查看完整回答
反對 回復 2019-09-18
?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

實際上有些情況下上面的答案會破裂。如錯誤的輸入值,錯誤的輸入范圍,負輸入/輸出范圍。


def remap( x, oMin, oMax, nMin, nMax ):


    #range check

    if oMin == oMax:

        print "Warning: Zero input range"

        return None


    if nMin == nMax:

        print "Warning: Zero output range"

        return None


    #check reversed input range

    reverseInput = False

    oldMin = min( oMin, oMax )

    oldMax = max( oMin, oMax )

    if not oldMin == oMin:

        reverseInput = True


    #check reversed output range

    reverseOutput = False   

    newMin = min( nMin, nMax )

    newMax = max( nMin, nMax )

    if not newMin == nMin :

        reverseOutput = True


    portion = (x-oldMin)*(newMax-newMin)/(oldMax-oldMin)

    if reverseInput:

        portion = (oldMax-x)*(newMax-newMin)/(oldMax-oldMin)


    result = portion + newMin

    if reverseOutput:

        result = newMax - portion


    return result


#test cases

print remap( 25.0, 0.0, 100.0, 1.0, -1.0 ), "==", 0.5

print remap( 25.0, 100.0, -100.0, -1.0, 1.0 ), "==", -0.25

print remap( -125.0, -100.0, -200.0, 1.0, -1.0 ), "==", 0.5

print remap( -125.0, -200.0, -100.0, -1.0, 1.0 ), "==", 0.5

#even when value is out of bound

print remap( -20.0, 0.0, 100.0, 0.0, 1.0 ), "==", -0.2


查看完整回答
反對 回復 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 1460 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號