当前位置: 首页 > 面试题库 >

将数字范围转换为另一个范围,保持比例

勾渝
2023-03-14
问题内容

我正在尝试将一个数字范围转换为另一个数字范围,并保持比率。数学不是我的强项。

我有一个图像文件,其中点值的范围可能在-16000.00到16000.00之间,尽管典型范围可能会小得多。我想做的是将这些值压缩到0-100的整数范围内,其中0是最小点的值,而100是最大点的值。即使丢失了一些精度,它们之间的所有点也应保持相对比率,我想在python中做到这一点,但即使是通用算法也足够。我更喜欢可以调整最小/最大或任意一个范围的算法(即,第二个范围可以是-50到800,而不是0到100)。


问题答案:
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



 类似资料:
  • 对于我的Java类,我正在编写一个小程序,首先选择一个介于1和100之间的数字。然后,它会提示用户开始猜测正确的。如果用户对的猜测过高或过低,程序会打印出一个新范围,供他们在该范围内进行猜测。如果用户输入或,程序只需重新要求用户输入,但不会以任何方式更改范围。 示例输出(当机密号为20时)如下所示: 该项目似乎已经基本完成,但只有一个例外。其中一个要求是,当用户键入的超出我们给定的1和100范围时

  • 问题 如果你想知道某个变量是否在给定的范围内。 解决方案 使用 CoffeeScript 的连缀比较语法。 maxDwarfism = 147 minAcromegaly = 213 height = 180 normalHeight = maxDwarfism < height < minAcromegaly # => true 讨论 这是从 Python 中借鉴过来的一个很棒的特性。利用这

  • 问题内容: 是否可以通过某种方式将一个函数的范围传递给另一个函数? 例如, 我宁愿直接访问变量,即,不使用类似或的任何东西,而只是直接使用或。 问题答案: 真正访问函数私有范围的唯一方法是在函数内部声明,这样就形成了一个闭包,允许隐式访问变量。 这是您的一些选择。 直接访问 在内部声明。 如果您不想在中使用,则可以将它们都放在更大的容器范围内: 这些是您可以直接使用的变量而无需任何额外的代码来移动

  • 假设我有一个范围(section)和一个额外的要排除的范围列表,由元组(start,end)表示: 我正在寻找一种有效的算法,从这两个输入中返回一个新的范围列表,如: 这是引出第二个范围列表的主范围。 谢啦! 编辑: 实际上,deceze关于使用intervaltree的建议似乎很有趣。有几行: 显然,间隔被视为已关闭,但这是一个小问题。

  • 问题内容: 我有一个表,其中包含一列作为CIDR值,例如,我还有其他2列(start_ip_range和end_ip_range),我想填充这2列FROM CIDR列 Java代码可能如下所示: 如何将其转换为MySql查询。 问题答案: 你可以这样转换 询问 样品表 或者,您可以在虚拟列中使用它。因此,您可以直接获得正确的值。 虚拟领域

  • 问题内容: 是否有任何技术可以允许这样的行设置 产生结果 实际上,这是行到范围的操作。我正在Oracle Land上玩,并且希望您提出任何建议。 问题答案: 我觉得可能可以对此进行改进,但是它可以起作用: