उपयोगकर्ता 1415 9 46 की टिप्पणी पर बिल्डिंग, आप मान सकते हैं कि प्रत्येक बिंदु को [[e_x[i]**2,0][0,e_y[i]**2]]
द्वारा दिए गए कॉन्वर्सिस मैट्रिस के साथ दर्शाता है। हालांकि, परिणामी वितरण सामान्य वितरण नहीं है - उदाहरण के बाद, आप देखेंगे कि हिस्टोग्राम गॉसियन जैसा नहीं है, बल्कि इसके बजाय एक समूह है।
वितरण के इस सेट से हिस्टोग्राम बनाने के लिए, एक तरफ मैं देखता हूं कि numpy.random.multivariate_normal का उपयोग करके प्रत्येक बिंदु से यादृच्छिक नमूने उत्पन्न करना है। कुछ कृत्रिम डेटा के साथ नीचे उदाहरण कोड देखें।
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
# This is a function I like to use for plotting histograms
def plotHistogram3d(hist, xedges, yedges):
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
hist = hist.transpose()
# Transposing is done so that bar3d x and y match hist shape correctly
dx = np.mean(np.diff(xedges))
dy = np.mean(np.diff(yedges))
# Computing the number of elements
elements = (len(xedges) - 1) * (len(yedges) - 1)
# Generating mesh grids.
xpos, ypos = np.meshgrid(xedges[:-1]+dx/2.0, yedges[:-1]+dy/2.0)
# Vectorizing matrices
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros(elements)
dx = dx * np.ones_like(zpos) * 0.5 # 0.5 factor to give room between bars.
# Use 1.0 if you want all bars 'glued' to each other
dy = dy * np.ones_like(zpos) * 0.5
dz = hist.flatten()
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color='b')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('Count')
return
"""
INPUT DATA
"""
# x y ex ey w
data = np.array([[1, 2, 1, 1, 1],
[3, 0, 1, 1, 2],
[0, 1, 2, 1, 5],
[7, 7, 1, 3, 1]])
"""
Generate samples
"""
# Sample size (100 samples will be generated for each data point)
SAMPLE_SIZE = 100
# I want to fill in a table with columns [x, y, w]. Each data point generates SAMPLE_SIZE
# samples, so we have SAMPLE_SIZE * (number of data points) generated points
points = np.zeros((SAMPLE_SIZE * data.shape[0], 3)) # Initializing this matrix
for i, element in enumerate(data): # For each row in the data set
meanVector = element[:2]
covarianceMatrix = np.diag(element[2:4]**2) # Diagonal matrix with elements equal to error^2
# For columns 0 and 1, add generated x and y samples
points[SAMPLE_SIZE*i:SAMPLE_SIZE*(i+1), :2] = \
np.random.multivariate_normal(meanVector, covarianceMatrix, SAMPLE_SIZE)
# For column 2, simply copy original weight
points[SAMPLE_SIZE*i:SAMPLE_SIZE*(i+1), 2] = element[4] # weights
hist, xedges, yedges = np.histogram2d(points[:, 0], points[:, 1], weights=points[:, 2])
plotHistogram3d(hist, xedges, yedges)
plt.show()
परिणाम नीचे दर्शाया गया:
इन त्रुटि मान क्या प्रतिनिधित्व करते हैं? क्या प्रमुख अक्षों के साथ ये मानक विचलन हैं? –
@ डेब्रायन ठीक है। – Gabriel
ठीक है, पैरामीटर का सेट एक बहुविकल्पीय जीएमएम का गठन करता है, दिए गए वजन (\ pi_i), नमूनों के रूप में नमूने (\ mu_i) और कॉन्वर्सिस मैट्रिस (\ Sigma_i) [[e_x [i] ** 2,0] [ 0, e_y [i] ** 2]]। आपके द्वारा माने गए मानक सामान्य मामले के विपरीत (जो सभी ई_एक्स और ई_ई 1.0 के बराबर है), आपके पास कॉन्वर्सिस मैट्रिस हैं जहां विकर्ण के पास अलग-अलग मान हो सकते हैं। यह सर्कल के विपरीत, प्रमुख अक्षों के साथ प्रमुख अक्षों के साथ अंडाकारों से मेल खाता है। क्या इससे आपको आगे बढ़ने में मदद मिलती है? –