Python中的随机平滑斜率

时间:2018-07-23 17:00:40

标签: python math coordinates

如何使用python创建随机的平滑斜率(如this)?按中创建,生成一个坐标列表,其中x以恒定速率增加。我知道已经询问并回答了与此类似的问题,但是我没有找到专门针对python的问题。

谢谢!

1 个答案:

答案 0 :(得分:3)

在任何计算机语言中都无法获得完全平滑的任意曲线,因为该语言处理的数据有限,而曲线需要无限的数据。即使您显示的图形也只有水平1,309像素。

在Python中绘制看起来平滑的图形的通常方法是为x坐标创建许多值。为您的图形执行此操作的一种常见方法是,它看起来x值介于-2到26之间,

import numpy as np

x = np.linspace(-2.0, 26.0, num=1000)

请注意,我使用了一千个x值。然后,您创建相应的y值。如果需要随机曲线,请在表达式中使用一些随机参数。这是一个示例:

y = ((x - uniform(-2, 26)) * (x - uniform(-2, 26)) * (x - uniform(-2, 26))
    * (x - uniform(-2, 26)))

还有许多其他方法可以随机定义一个函数-我选择了一种方法,为曲线选择了四个随机x截距。让我知道您想要的更多细节,也许我可以为您定义另一个。

然后将这些值绘制在诸如matplotlib之类的图形包中。这是一个代码示例及其结果。该版本将y值限制在0到10之间,并定义了函数randomfunc,您可以在制作图形之后为任何特定x计算y的值。要在x = 1处找到y值,请执行randomfunc(1, x1, x2, x3, x4, ymax, ymin)

import numpy as np
import matplotlib.pyplot as plt

# Key values
xmin = -2.0
xmax = 26.0
scale = 10.0

def randomfunctemp(x, x1, x2, x3, x4):
    return (x-x1) * (x-x2) * (x-x3) * (x-x4)

def randomfunc(x, x1, x2, x3, x4, ymax, ymin):
    return (randomfunctemp(x, x1, x2, x3, x4) - ymin)  / (ymax - ymin) * scale

x = np.linspace(xmin, xmax, num=1000)
x1, x2, x3, x4 = np.random.uniform(xmin, xmax, 4)
y = randomfunctemp(x, x1, x2, x3, x4)
ymax, ymin = y.max(), y.min()
y = randomfunc(x, x1, x2, x3, x4, ymax, ymin)

plt.plot(x,y)
plt.show()

enter image description here