我的任务是编写一个名为random_line的函数,该函数为具有正态分布N(0,σ^ 2)的y方向随机噪声的线创建x和y数据: 表达式y = mx + B + N(0,σ^ 2)。
我现在的问题是,我猜的数学与编程有关。为了创建我的ydata点,我猜我必须将我的x数据点数组插入上面的等式中。但是,我不知道如何计算N(0,σ^ 2)部分。有什么想法吗?
def random_line(m, b, sigma, size=10):
"""Create a line y = m*x + b + N(0,sigma**2) between x=[-1.0,1.0]
Parameters
----------
m : float
The slope of the line.
b : float
The y-intercept of the line.
sigma : float
The standard deviation of the y direction normal distribution noise.
size : int
The number of points to create for the line.
Returns
-------
x : array of floats
The array of x values for the line with `size` points.
y : array of floats
The array of y values for the lines with `size` points.
"""
xdata = np.linspace(-1.0,1.0,size)
ydata = 'xxxxxxx'
return xdata, ydata
答案 0 :(得分:1)
使用scipy.stats
中的分布,可以轻松地创建正态分布式错误,使您可以轻松地将它们添加到xdata
等其他numpy数组中:
import scipy.stats
import numpy as np
import matplotlib.pyplot as plt
def random_line(m, b, sigma, size=10):
xdata = np.linspace(-1.0,1.0,size)
# Generate normally distributed random error ~ N(0, sigma**2)
errors = scipy.stats.norm.rvs(loc=0, scale=sigma, size=size)
ydata = m * xdata + b + errors
return xdata, ydata
xs, ys = random_line(2, 3, 2, size=50)
# Plot to see how closely the values fit the
# original line
fig, ax = plt.subplots()
ax.plot(xs, ys, 'o')
ax.plot(xs, 2 * xs + 3)
答案 1 :(得分:0)
查看Python标准库中的random.normalvariate。