2013-09-08 9 views
11

का उपयोग करके यादृच्छिक सहसंबंधित एक्स और वाई अंक उत्पन्न करना मैं विभिन्न matplotlib साजिश दृष्टिकोण का परीक्षण करने के लिए एक्स और वाई निर्देशांक के सहसंबंधित सरणी उत्पन्न करना चाहता हूं, लेकिन मैं कहीं विफल रहा हूं, क्योंकि मुझे numpy.random.multivariate_normal नहीं मिल रहा है मुझे नमूने मुझे चाहिए। आदर्श रूप से, मैं अपने x मानों को -0.51, और 51.2 के बीच चाहता हूं, और मेरे y मान 0.33 और 51.6 के बीच मानते हैं (हालांकि मुझे लगता है कि बराबर श्रेणियां ठीक होंगी, क्योंकि मैं बाद में साजिश को रोक सकता हूं), लेकिन मुझे यकीन नहीं है कि इसका क्या अर्थ है (0, 0?) और कॉन्वर्सिस मानों का उपयोग इन नमूने को फ़ंक्शन से प्राप्त करने के लिए किया जाना चाहिए।नम्पी

उत्तर

20

जैसा कि नाम का तात्पर्य है numpy.random.multivariate_normal सामान्य वितरण उत्पन्न करता है, इसका मतलब है कि किसी दिए गए अंतराल के बाहर बिंदु खोजने की एक गैर-शून्य संभावना है। आप सहसंबंधित वर्दी वितरण उत्पन्न कर सकते हैं लेकिन यह थोड़ा और अधिक मजबूत है। दो संभावित तरीकों के लिए here देखें।

यदि आप सामान्य वितरण के साथ जाना चाहते हैं तो आप सिग्मा सेट कर सकते हैं ताकि आपका आधा अंतराल 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

संबंधित मुद्दे