কিছু উদ্দেশ্যে, আমাকে "opালু ইউনিফর্ম" বিতরণ থেকে এলোমেলো সংখ্যা (ডেটা) তৈরি করতে হবে। এই বিতরণের "opeাল" কিছু যুক্তিসঙ্গত ব্যবধানে পরিবর্তিত হতে পারে এবং তারপরে আমার বিতরণটি uniformালের উপর ভিত্তি করে ইউনিফর্ম থেকে ত্রিভুজাকারে পরিবর্তিত হওয়া উচিত। এখানে আমার ব্যয়:
আসুন এটি সহজ করা যাক এবং থেকে তে ডেটা ফর্ম উত্পন্ন করুন (নীল, লাল একরকম বিতরণ)। নীল লাইনের সম্ভাব্যতা ঘনত্ব ফাংশনটি পেতে আমার কেবল সেই লাইনের সমীকরণ প্রয়োজন। এভাবে:
এবং যেহেতু (ছবি):
আমাদের তা আছে:
যেহেতু পিডিএফ, তাই সিডিএফ সমান:
এখন একটি ডেটা জেনারেটর তৈরি করা যাক। ধারণাটিটি হ'ল, আমি যদি , র্যান্ডম সংখ্যার করতে পারি তবে আমি এখানে বর্ণিত অভিন্ন বিতরণ থেকে নম্বর পেয়েছি যদি তা গণনা করা যায় । সুতরাং, যদি আমি নির্দিষ্ট সঙ্গে আমার বন্টন থেকে 100 র্যান্ডম সংখ্যা প্রয়োজন , যেকোনো জন্য সমবন্টন থেকে আছে "ঢালু বন্টন" থেকে, এবং হিসেবে নির্ণিত করা যেতে পারে:
এই তত্ত্বটি থেকে আমি পাইথনে কোড তৈরি করেছি যা দেখে মনে হচ্ছে:
import numpy as np
import math
import random
def tan_choice():
x = random.uniform(-math.pi/3, math.pi/3)
tan = math.tan(x)
return tan
def rand_shape_unif(N, B, tg_fi):
res = []
n = 0
while N > n:
c = random.uniform(0,1)
a = tg_fi/2
b = 1/B - (tg_fi*B)/2
quadratic = np.poly1d([a,b,-c])
rots = quadratic.roots
rot = rots[(rots.imag == 0) & (rots.real >= 0) & (rots.real <= B)].real
rot = float(rot)
res.append(rot)
n += 1
return res
def rand_numb(N_, B_):
tan_ = tan_choice()
res = rand_shape_unif(N_, B_, tan_)
return res
তবে উত্পন্ন সংখ্যাগুলি rand_numb
শূন্যের নিকটে বা বি এর (যা আমি 25 হিসাবে সেট করেছি) খুব কাছাকাছি। কোনও বৈকল্পিকতা নেই, যখন আমি 100 নম্বর উত্পন্ন করি তখন তাদের সমস্তগুলি 25 এর কাছাকাছি বা সমস্ত শূন্যের কাছাকাছি থাকে। এক রান:
num = rand_numb(100, 25)
numb
Out[140]:
[0.1063241766836174,
0.011086243095907753,
0.05690217839063588,
0.08551031241199764,
0.03411227661295121,
0.10927087752739746,
0.1173334720516189,
0.14160616846114774,
0.020124543145515768,
0.10794924067959207]
সুতরাং আমার কোড কিছু খুব অবশ্যই ভুল আছে। আমার উপার্জন বা কোড সম্পর্কে কেউ আমাকে সহায়তা করতে পারেন? আমি এখন এ সম্পর্কে পাগল, আমি কোনও ভুল দেখতে পাচ্ছি না। আমি মনে করি আর কোড আমার অনুরূপ ফলাফল দেবে।
B
theta
n
R
x<-runif(n,-1,1);x<-(ifelse(runif(n,-1,1)>theta*x,-x,x)+1)*(B/2)