5

पर बिंदुओं का समान वितरण मुझे 4 आयामी क्षेत्र पर बिंदुओं के समान वितरण की आवश्यकता है। मुझे पता है कि यह 3 कोणों को चुनने और ध्रुवीय निर्देशांक का उपयोग करने के रूप में तुच्छ नहीं है।पाइथन 4 आयामी क्षेत्र

3 आयामों में मैं

from random import random 

u=random() 
costheta = 2*u -1 #for distribution between -1 and 1 
theta = acos(costheta) 
phi = 2*pi*random 

x=costheta 
y=sin(theta)*cos(phi) 
x=sin(theta)*sin(phi) 

का उपयोग यह एक्स, वाई और जेड की एक समान वितरण देता है।

मैं 4 आयामों के लिए समान वितरण कैसे प्राप्त कर सकता हूं?

+0

एन-गोलाकार पर यादृच्छिक रूप से समान रूप से वितरित बिंदु कैसे उत्पन्न करें: http://en.wikipedia.org/wiki/N-sphere#Uniformly_at_random_from_the_.28n.C2.A0.E2.88.92.C2.A01।2 9-क्षेत्र – unutbu

+1

प्रतीक्षा करें, आप अंक को गोलाकार पर रखना चाहते हैं, लेकिन समान रूप से एक्स, वाई, जेड, (चौथा आयाम) में वितरित किया गया है? वह मेरे लिए नहीं जोड़ता है। मुझे नहीं लगता कि एक क्षेत्र पर समान रूप से वितरित अंक 4-स्पेस में समान रूप से वितरित किए जाएंगे। –

+0

@SchighSchagh ताकि आप 4 आयामों में मोंटे कार्लो सिमुलेशन नहीं चला सकते? –

उत्तर

1

4 डी स्पेस में कोई यादृच्छिक बिंदु लें, और इसकी इकाई वेक्टर की गणना करें। यह यूनिट 4-गोलाकार पर होगा।

from random import random 
import math 
x=random.normalvariate(0,1) 
y=random.normalvariate(0,1) 
z=random.normalvariate(0,1) 
w=random.normalvariate(0,1) 
r=math.sqrt(x*x + y*y + z*z + w*w) 
x/=r 
y/=r 
z/=r 
w/=r 
print (x,y,z,w) 
+0

निश्चित रूप से, यह 4-गोलाकार पर एक यादृच्छिक बिंदु उत्पन्न करेगा, लेकिन वितरण वर्दी है? –

+0

@SchighSchagh: समान रूप से वितरित? हाँ। – Manishearth

+1

एक्स, वाई, जेड, डब्ल्यू आर^4 के संबंध में यादृच्छिक रूप से यादृच्छिक रूप से समान रूप से समान हैं, लेकिन फिर वे एक गैर-रैखिक परिवर्तन से गुजरते हैं, और यह अभी भी मुझे स्पष्ट नहीं है कि यदि ओपी समान रूप से यादृच्छिक रूप से यादृच्छिक रूप से यादृच्छिक रूप से चाहता है क्षेत्र या आर^4 के संबंध में। संपादित करें: क्या आप यादृच्छिक रूप से समान रूप से दावा करते हैं और इसे साबित करते हैं, इसके संबंध में आप निर्दिष्ट कर सकते हैं? –

5

A standard way, हालांकि, शायद not the fastest, मुलर की विधि का उपयोग करने के लिए एक एन-क्षेत्र पर समान रूप से वितरित अंक उत्पन्न करने के लिए है:

import numpy as np 
import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d.axes3d as axes3d 

N = 600 
dim = 3 

norm = np.random.normal 
normal_deviates = norm(size=(dim, N)) 

radius = np.sqrt((normal_deviates**2).sum(axis=0)) 
points = normal_deviates/radius 

fig, ax = plt.subplots(subplot_kw=dict(projection='3d')) 
ax.scatter(*points) 
ax.set_aspect('equal') 
plt.show() 

enter image description here

सीधे शब्दों में dim = 4 को dim = 3 बदल अंक उत्पन्न करने के लिए 4-गोलाकार पर

+0

एक समान वितरण लेना उन बिंदुओं की घनत्व के साथ नमूना प्राप्त करेगा जो घन के कोनों की ओर अधिक है जो इसे कब्जा कर लेगा। कैसे साबित करें कि गॉसियन वितरण का उपयोग करने से यह समस्या भी नहीं होगी? ऐसा लगता है कि अगर मैं इसे मानसिक रूप से चित्रित करता हूं, लेकिन क्या यह वास्तव में है, और क्यों? मैं आकार निर्दिष्ट करते समय प्रत्येक समन्वय के लिए स्वतंत्र होने के लिए numpy के Gaussian वितरण मानते हैं। –

+0

और शून्य से विभाजन के बारे में क्या? –

+1

@ गुइलाउम चेवलियर: मैं कबूल करता हूं कि मुझे विवरण समझ में नहीं आ रहा है, लेकिन शायद आपको यह सबूत उपयोगी होगा [https://stats.stackexchange.com/questions/7977/how-to-generate-uniformly- वितरित- अंक ऑन-सतह-ऑफ-द-3-डी-यूनिट-SPHE # comment13055_7984)। शून्य से विभाजन के मुद्दे पर: मेरा मानना ​​है कि divisor 0 की संभावना 0 है। व्यावहारिक स्तर पर, NumPy * चेतावनी * जारी करके शून्य से विभाजन को संभालता है और 'NaN' लौटाता है (और Matplotlib NaN के बराबर अंक छोड़ देता है)। – unutbu

0

मुझे @ unutbu का जवाब पसंद है यदि गाऊशियन नमूना वास्तव में एक समान दूरी वाले गोलाकार वितरण (घन से नमूनाकरण के विपरीत) बनाता है, लेकिन गॉसियन वितरण पर नमूना लेने से बचने के लिए और यह साबित करने के लिए, एक सरल समाधान है: एक क्षेत्र पर एक समान वितरण पर नमूना (घन पर नहीं)।

  1. समान वितरण पर अंक उत्पन्न करें।
  2. प्रत्येक बिंदु के वर्ग त्रिज्या (वर्ग रूट से बचें) की गणना करें।
  3. त्यागें अंक: जिसके लिए
    • त्यागें अंक चुकता त्रिज्या (, इस प्रकार जिसके लिए unsquared त्रिज्या 1 से अधिक है) 1 से अधिक है।
    • अगले चरण में विभाजन से संबंधित संख्यात्मक अस्थिरता से बचने के लिए शून्य के त्रिज्या के बहुत करीब बिंदुओं को छोड़ दें।
  4. प्रत्येक नमूना बिंदु के लिए रखा, यह इकाई त्रिज्या renormalize लिए इतनी के रूप में आदर्श द्वारा नमूना बिंदु विभाजित करते हैं।
  5. छोड़े गए नमूनों के कारण अधिक अंक के लिए धोएं और दोहराएं।

यह स्पष्ट रूप से एक एन-आयामी अंतरिक्ष में काम करता है, क्योंकि त्रिज्या हमेशा उच्च आयामों में एल 2-मानदंड होता है।

यह तेजी से है क्योंकि एक गॉसियन वितरण पर स्क्वायर रूट और नमूना से बचने के लिए, लेकिन यह एक वेक्टरकृत एल्गोरिदम नहीं है।

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