【问题标题】:re-scaling the values between given maximum and minimum, where max is positive and min is negative在给定的最大值和最小值之间重新缩放值,其中最大值为正,最小值为负
【发布时间】:2013-04-10 01:45:06
【问题描述】:

我想要重新缩放一组值(正浮点值和负浮点值),以便这些值介于 -5 到 +5 或 -3 到 +2 之间。我怎样才能缩小它。有没有具体的公式。我尝试搜索,但没有找到任何可以处理负最小值的东西。

提前谢谢...

【问题讨论】:

  • 你使用什么语言?
  • perl 或 python 都可以
  • 您是在寻找特定数字到特定值还是只是将所有数字转换为-5<=x<=+5
  • 我想将所有数字转换为 -5
  • 这里描述了一个通用公式:stats.stackexchange.com/questions/281162/…

标签: python perl math graph statistics


【解决方案1】:

尝试像这样将值映射到 (0, 1) 比例:

y = (x - xmin) / (xmax - xmin)

你也可以使用有限元形状函数:

y = h1*x1 + h2*x2

在哪里

h1 = (z - 1)/2.0 for -1 <= z <= +1
h2 = (z + 1)/2.0 for -1 <= z <= +1

这会将您的值映射到 (-1, 1) 比例。

【讨论】:

  • 但我希望最小值为 -ve 而不是 0
  • 要映射到 (-1,1) 比例的原始值。
【解决方案2】:

您可以使用线性插值/外推公式来获得您想要的结果。

代码:

def rescale(val, in_min, in_max, out_min, out_max):
    return out_min + (val - in_min) * ((out_max - out_min) / (in_max - in_min))

print(rescale(4, 4, 20, 0, 100))  # => 0.0
print(rescale(12, 4, 20, 0, 100)) # => 50.0
print(rescale(20, 4, 20, 0, 100)) # => 100.0
print(rescale(0, 4, 20, 0, 100))  # => -25.0

请注意,此代码不会根据提供的最小和最大界限检查您的值,因此它将像上一个示例一样进行推断。根据需要进行修改。

【讨论】:

    【解决方案3】:

    缩减数据的最简单方法是确定数据的最大值(正数或负数),并使用该最大值来相应地缩放所有其他数据。

    例如,如果您的数据中最多有 320 个

     320 / 320 * 5  => 5
     160 / 320 * 5  => 2.5
    -160 / 320 * 5  => -2.5
    

    所以作为一个一般方程

    x / abs(maximum) * scale
    

    【讨论】:

    • 非常好的、简单的“偶数”缩放解决方案(在本例中为 -5 到 +5),但它不满足“-3 到 +2”的要求。
    • 那是因为实际上你不能这样做,他想对其进行缩放,以使数据在数据图上看起来相同。为了将其缩放到可变轴长度,与另一侧相比,一侧会显得“拉伸”。您可以缩放它,使数据看起来相同,但最终会偏移轴长度差的一半。
    • 你是对的。我在有许多其他 cmets 之前阅读了这篇文章。我把它理解为“在用户定义的最小值和最大值之间重新调整我的值。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多