将指数范围的整数转换为另一个范围

时间:2018-03-08 23:09:45

标签: python math

我正在尝试将一系列数字转换为另一个范围(以指数方式)。我试图在python中这样做。我没有数学背景(实际上也没有计算机科学的正规教育),所以我会尽力以清晰的方式解释我的问题。

假设我有以下范围[A,B]:

[-10 , 25]
[-35 , -1]
[0 , 100]

我想将它们标准化为以下范围[C,D]:

[0 , 3]
[1 , 5]
[0 , 100]

我当然可以通过这个来规范这些数字:

normalized = (x-min(x))/(max(x)-min(x))

这会给我一个0到1之间的(线性)归一化响应。

如果我想获得指数结果,我会通过函数提供标准化结果:

enter image description here

现在我的问题:

我想创建一个函数,我可以在极端情况下输入两个范围([A,B]和[C,D]):

A = C
B = D

结果呈指数增长。再说一遍,我的数学缺乏。上面的图片示例在y = 100时未提供x = 100。所以我不知道如何在考虑改变输入的情况下确定指数公式。

简而言之:我希望在使用不同变量作为输入时选择不同的指数增长强度,但在y = max_resultx = max_inputy = min_resultx = min_input总是Input: # Range of input values AB = [0,100] # Range of output values CD = [0,1000] # Math function for exponential formula_input = # Some formula made with range [0,100] on both X and Y x1 = 10 x2 = 20 x3 = 50 x4 = 90 Output: formula = 1.072^x y1 = 2.004 y2 = 4.017 y3 = 32.34 y4 = 521.832

一个例子:

{{1}}

我希望这个问题足够明确。在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

让我们首先编写一个指数函数的通用形式,以便在这种情况下使用:

enter image description here

a, b, c, d, e都是常量。使用指数规则:

  • d可以与a分开并结合使用:

    enter image description here

  • c可以与基座b合并:

    enter image description here

所以我们将5个参数减少到3个。现在将这些参数调整到终点;称他们为[x1, y1][x2, y2]

enter image description here

因此,中间的坐标由下式给出:

enter image description here

r是跨越[0, 1]的规范化参数。因此,我们将参数集简化为B(加上终点坐标)。

使用B = [2, 3, 4, 5],端点[1, 2][3, 10]进行测试:

enter image description here

答案 1 :(得分:1)

对于您的示例,您基本上想要为b^100 = 1000解决b

您可以使用日志执行此操作:

ln(b^100) = ln(1000)
100 ln(b) = ln(1000)
ln(b) = ln(1000) / 100
b = exp(ln(1000) * (1/100))
b = 1000^(1/100)

大约是1.07152。

对此进行概括,如果您有[0, A][0, B],那么b = B^(1/A)

我不确定你是如何想要从其他地方开始的范围,但是无论你决定这样做,你都应该能够使用对数来找到你的解决方案。