【问题标题】:Generating random correlated x and y points using Numpy使用 Numpy 生成随机相关的 x 和 y 点
【发布时间】:2013-09-12 02:11:35
【问题描述】:

我想生成 x 和 y 坐标的相关数组,以测试各种 matplotlib 绘图方法,但我在某处失败了,因为我无法让 numpy.random.multivariate_normal 给我我想要的样本。理想情况下,我希望我的 x 值介于 -0.51 和 51.2 之间,我的 y 值介于 0.33 和 51.6 之间(尽管我认为相等的范围是可以的,因为我可以在之后限制绘图),但我不确定是什么意思( 0, 0?) 和协方差值,我应该使用这些值从函数中获取这些样本。

【问题讨论】:

    标签: python random numpy correlation normal-distribution


    【解决方案1】:

    顾名思义,numpy.random.multivariate_normal 生成正态分布,这意味着在任何给定区间之外找到点的概率为非零。您可以生成相关的均匀分布,但这有点复杂。查看here 了解两种可能的方法。

    如果您想采用正态分布,您可以设置 sigmas,使您的半区间对应于 3 个标准差(如果需要,您还可以过滤掉坏点)。这样,您将在区间内获得约 99% 的分数,例如:

    import numpy as np
    from matplotlib.pyplot import scatter
    
    xx = np.array([-0.51, 51.2])
    yy = np.array([0.33, 51.6])
    means = [xx.mean(), yy.mean()]  
    stds = [xx.std() / 3, yy.std() / 3]
    corr = 0.8         # correlation
    covs = [[stds[0]**2          , stds[0]*stds[1]*corr], 
            [stds[0]*stds[1]*corr,           stds[1]**2]] 
    
    m = np.random.multivariate_normal(means, covs, 1000).T
    scatter(m[0], m[1])
    

    【讨论】:

    • 是否有可能实现一个变体,以便从具有自己的平均值和标准差的现有 numpy 数组创建相关变量(即 numpy 数组)?
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2022-01-04
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多