Başka bir dizi bir dizi oranını koruyarak dönüştürmek
Başka sayıların bir aralığı, oranı bakımı dönüştürmek için çalışıyorum. Matematik benim güçlü noktası değildir.
Nokta değerleri normal aralığın çok daha az olsa da 16000.00 için -16000.00 aralığı olabilir bir resim dosyası var. Yapmak istediğim şey tam sayı aralığı bu değerler 0 en küçük değeri nerede 0-100, sıkıştırmak, 100 en büyük değeridir. Bazı hassas kayıp olsa bile göreceli bir oran tutmalı arasındaki tüm noktaları python ile bunu yapmak istiyorum ama daha genel bir algoritma yeterli olacaktır. Min/maks ya da aralığı ayarlanabilir bir algoritma (yani, ikinci aralığı 800 -50 olabilir yerine 0'dan 100) tercih ederim.
CEVAP
NewValue = (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) NewMin
Ya da biraz daha okunabilir:
OldRange = (OldMax - OldMin)
NewRange = (NewMax - NewMin)
NewValue = (((OldValue - OldMin) * NewRange) / OldRange) NewMin
Ya da eski bir aralığı 0 olduğu için korumak içinOldMin = OldMax):
OldRange = (OldMax - OldMin)
if (OldRange == 0)
NewValue = NewMin
else
{
NewRange = (NewMax - NewMin)
NewValue = (((OldValue - OldMin) * NewRange) / OldRange) NewMin
}
Bu durumda Olası yeni değerler keyfi olarak birini seçmek zorunda olduğumuzu unutmayın. Bağlam, mantıklı seçenekler bağlı olabilir: NewMin
(örnek bakın), NewMax
(NewMin NewMax) / 2
Nasıl Ruby başka bir dizi için bir diz...
Ruby - zarif bir dizi değişken bir diz...
Nasıl string bir dizi nesne dizisi dön...
Bir Dizi için bir HTMLCollection dönüş...
Datarow datatable dizi dönüştürmek içi...