我有两个变量,我们称它们为x
and y
,绘制时是图中分散的蓝点。我已经使用 Scipy 中的 curve_fit 拟合了它们.
我想生成(假设 500000)“平滑”复制分布的随机数,然后x
and y
.
By “平滑”我的意思是,我不想要完全复制我的数据的随机数(x
and y
)如图所示below,与red diamonds being my data distribution and the histogram being my generated randoms.
(就连数据的波动都被复制到了这里!!!!)。我想要一个“平滑”的直方图。
到目前为止我所尝试的是符合要点x
and y
using curve_fit
来自 scipy.现在我知道数据分布是什么了。现在我需要创建遵循上述内容的随机数fit/分配。
P.S 我也尝试过创建从 0 到 1 的均匀随机数,并尝试获得拟合曲线下方的点,但我不知道如何!
我建议您采用数据分布拟合,然后向其中添加一些随机“噪声”,这应该会产生一些仍然遵循您的分布但针对您需要的任何目的进行随机化的数据。
下面是一些采用数据分布拟合的代码(在函数中curve
),然后使用从其中检索的数据进行随机化numpy.random http://docs.scipy.org/doc/numpy/reference/routines.random.html module.
import numpy as np
import matplotlib.pyplot as plt
from random import random
# I don't have your data but let's assume that this function
# replicates the data distribution you want to work with.
def curve(x):
return 2. * x + 5.
N = 100
x = np.linspace(0,1,100)
y_fit = curve(x)
# margin controls how "noisy" you want your fit to be.
margin = 0.5
noise = margin*(np.random.random(N)-0.5)
y_ran = y_fit + noise
plt.plot(x, y_fit) # Plot the fitted distribution.
plt.plot(x, y_ran, 'rx') # Plot the noisy data.
plt.show()
请注意,这只会创建 100 个随机结果,如果您愿意,您可以修改代码以创建所需数量的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)