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