我有一个Python函数,其参数为Slope
和Distance
,并返回Cost
。
斜率可以在1-80范围内。
距离可以在1 - 20000范围内。
成本可以是任何正数。
我想看看斜率,距离和成本之间的关系。 显示这三个变量之间关系的最佳情节是什么?我将如何创建它。 我想知道,如果斜率上升和距离下降,成本会发生什么变化? 如果坡度和距离上升,成本会怎样? 等...
def func(Slope, Distance):
...
return cost
SlopeList = list(xrange(81))
DistanceList = list(xrange(20000)
myList= []
for Distance in DistanceList:
for Slope in SlopeList:
cost = func(Slope, Distance)
var = (Slope, Distance, Cost)
append.myList(var)
答案 0 :(得分:2)
问题有点不清楚,所以我将尝试涵盖所有可能性:
a)如果你有两个变量的函数,比如func
,你可以为这两个变量的许多组合执行该函数,你可以使用matplotlib
绘制一个等高线图(也许)分别在x和y轴上的坡度和距离,以及轮廓显示的成本。有关示例,请参阅here。
b)如果您有以下功能:
Cost = func(Slope,Distance)
...你知道Cost和其他两个变量之一的值,那么你可以:
b1)再写两个函数(例如funcSlope(Cost,Distance)
和funcDistance(Slope,Cost)
),从已知变量中产生未知变量,或者
b2)如果函数func
不可用,那么你不知道它是如何计算的,因此不能明确地写出我为选项1建议的函数,或者很难分析地反转func
以找到与其他两个变量的斜率或距离,您可以使用如下代码以数字方式找到未知变量:
def func(Slope,Distance):
# Imagine that we didn't know the definition of this function
# so we couldn't write funcSlope() explicitly
return Slope * Distance**0.1234
def funcSlope(Cost,Distance,minSlope,maxSlope):
def fs (Slope):
return Cost - func(Slope,Distance)
return scipy.optimize.brentq(fs, minSlope, maxSlope)
print (func(2,6))
print (funcSlope(2.4949,6,0,10))
...输出为:
2.494904118641096
1.999996698357211
在调用brentq()
时,您将看到需要为未知变量指定边界。