web-dev-qa-db-ja.com

Numpyを使用してランダムに相関するxポイントとyポイントを生成する

さまざまなmatplotlibプロット手法をテストするために、x座標とy座標の相関配列を生成したいのですが、numpy.random.multivariate_normalを取得して必要なサンプルを取得できないため、どこかで失敗しています。理想的には、x値を-0.51〜51.2、y値を0.33〜51.6にする必要があります(ただし、後でプロットを制約できるため、同じ範囲でも問題ないと思います)が、どういう意味かわかりません( 0、0?)およびこれらのサンプルを関数から取得するために使用する必要がある共分散値。

17
urschrei

名前が示すようにnumpy.random.multivariate_normalは正規分布を生成します。これは、任意の区間外の点を見つける確率がnullでないことを意味します。相関のある一様分布を生成できますが、これはもう少し複雑です。 2つの可能な方法について ここ を見てください。

正規分布を使用する場合は、半間隔が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])

enter image description here

29
elyase