Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一个整数范围以指数形式转换为另一个范围_Python_Math - Fatal编程技术网

Python 将一个整数范围以指数形式转换为另一个范围

Python 将一个整数范围以指数形式转换为另一个范围,python,math,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))

我试图将一个数字范围转换成另一个范围(以指数方式)。我正试图用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之间的(线性)标准化响应

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

现在我的问题是:

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

A = C
B = D
结果呈指数增长。再一次,这里我的数学是缺乏的。当
x=100
时,上面的图像示例没有给出
y=100
。所以我不知道如何在考虑输入变化的情况下确定指数公式

简而言之:我想在使用不同变量作为输入时选择不同的指数增长强度,但当
x=max\u输入时总是有
y=max\u结果
,当
x=min\u输入时总是有
y=min\u结果

例如:

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

我希望这个问题足够清楚。提前感谢您的帮助

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

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

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)


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

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

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

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)


我不确定您希望如何处理从其他地方开始的范围,但无论您决定如何处理,您都应该能够使用对数来找到您的解决方案。

让我们首先编写在这种情况下使用的指数函数的最一般形式:

其中
a、b、c、d、e都是常数。使用指数规则:

  • d
    可以与
    a
    分离和组合:

  • c
    可以与基
    b
    合并:

所以我们把5个参数减少到3个。现在将这些与终点相匹配;叫他们
[x1,y1]
[x2,y2]

因此,两者之间的坐标由下式给出:

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


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


首先,让我们写出在这种情况下使用的指数函数的最一般形式:

其中
a、b、c、d、e都是常数。使用指数规则:

  • d
    可以与
    a
    分离和组合:

  • c
    可以与基
    b
    合并:

所以我们把5个参数减少到3个。现在将这些与终点相匹配;叫他们
[x1,y1]
[x2,y2]

因此,两者之间的坐标由下式给出:

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


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


这个回答好得可笑。非常感谢你,我要找出如何将公式转换成代码。但是你使用的变量a、b、c、d和e代表什么呢?@kohloth参数表示这些曲线的一般形式。这个回答非常好。非常感谢你,我要找出如何将公式转换为代码。但是你使用的变量a、b、c、d和e代表什么呢?@kohloth参数表示这些曲线的一般形式