所以我使用这个python脚本来创建你在图像中看到的曲线。我没有详细介绍这个问题的实际用法,而是:
- 有没有办法创建没有线性值的蓝色和黄色曲线(红色曲线)?基于蓝线“公式”( sin(x * 90 * pi / 180))
- 此外,我是否真的需要创建一个for循环并像我在脚本中那样追加值,或者是否有更“干净”的方法在一行中创建值数组?
最后,我只想确保凭借我对数学和python的有限知识,我并没有让它变得比它需要的更复杂。谢谢。
### RED CURVE ###
linearValues = []
for i in range(0,91):
linearValues.append( float( float(i)/float(90) ) )
linearValues.reverse()
### BLUE CURVE ###
blueCurveValues = []
for i in range(0,91):
blueCurveValues.append( math.sin(linearValues[i]*90*math.pi/180) )
### YELLOW CURVE ###
yellowCurveValues = []
for i in range(0,91):
yellowCurveValues.append( float( linearValues[i]-(blueCurveValues[i]-linearValues[i]) ) )
答案 0 :(得分:1)
在Python 2中,你应该在分割之前将int
转换为float
s(如果你不想要整数除法)。然后,当你分割两个int
时,你只需要演员,这只发生在linearValues
上(你只需要float(i)/90
或i/float(90)
,而不是三个from __future__ import division
铸)。但是在Python 3中(或使用float
),这是自动完成的,您不需要对linearValues = [ i/90 for i in range(90,-1,-1) ]
blueCurveValues = [ math.sin(linearValues[i]*90*math.pi/180) for i in range(91) ]
yellowCurveValues = [ linearValues[i]-(blueCurvevalues[i]-linearValues[i] for i in range(91) ]
进行任何调用。我删除了它们。
用于创建列表的Pythonic方式称为“列表理解”。准确翻译你写的内容,这将是:
linearValues[i]
如果您不想计算linearValues,那么显而易见的事情就是每次只用i/90
替换90*math.pi/180
。这将简化您的蓝色值公式,但只是略微使您的黄色。至少,您可以考虑将math.pi/2
更改为(i/90*90*math.pi/180)
(或(i*math.pi/180)
更改为map
)。但这仍然是在引擎盖下使用红色曲线。
创建列表的另一个选项是linearValues = map(lambda x:x/90,range(90,-1,-1))
blueCurveValues = map(lambda x:math.sin(x*90*math.pi/180),linearValues)
yellowCurveValues = map(lambda x,y:x-(y-x),linearValues,blueCurveValues)
:
map
lambda
和{{1}}通常比列表理解更难阅读,但更短的公式通常更容易。所以红色应该是列表理解。蓝色和黄色取决于您的偏好。