আমি কীভাবে নাম্বারে পুনরাবৃত্তিযোগ্য এলোমেলো সংখ্যা তৈরি করতে পারি?
list = np.random.random_integers(20,size=(10))
আমি কীভাবে নাম্বারে পুনরাবৃত্তিযোগ্য এলোমেলো সংখ্যা তৈরি করতে পারি?
list = np.random.random_integers(20,size=(10))
উত্তর:
numpy.random.Generator.choice
replace
প্রতিস্থাপন ছাড়াই নমুনায় একটি যুক্তি সরবরাহ করে:
from numpy.random import default_rng
rng = default_rng()
numbers = rng.choice(20, size=10, replace=False)
আপনি যদি Generator
এপিআই ছাড়াই প্রাক-1.17 NumPy এ থাকেন তবে আপনি random.sample()
স্ট্যান্ডার্ড লাইব্রেরি থেকে ব্যবহার করতে পারেন :
print(random.sample(range(20), 10))
আপনি ব্যবহার numpy.random.shuffle()
এবং টুকরো টুকরো করতে পারেন , তবে এটি কম দক্ষ হবে:
a = numpy.arange(20)
numpy.random.shuffle(a)
print a[:10]
replace
উত্তরাধিকার numpy.random.choice
কার্যে একটি যুক্তিও রয়েছে , তবে এ যুক্তিটি অকার্যকরভাবে কার্যকর করা হয়েছিল এবং তারপরে এলোমেলো সংখ্যার স্ট্রিমের স্থায়িত্ব গ্যারান্টিগুলির কারণে অযোগ্য হয়ে পড়েছে, সুতরাং এটির ব্যবহারের প্রস্তাব দেওয়া হয়নি। (এটি মূলত অভ্যন্তরীণভাবে এলোমেলো এবং স্লাইস জিনিস করে does
random.sample(range(n), 10))
খুব বড় ক্ষেত্রেও কার্যকর হবে n
, যেহেতু কোনও range
অবজেক্ট কেবল একটি ছোট মোড়কের স্টোরিং স্টপ, স্টপ এবং ধাপের মান, তবে পূর্ণসংখ্যার সম্পূর্ণ তালিকা তৈরি করে না। পাইথন 2 এ, আপনি অনুরূপ আচরণ পেতে এর range
সাথে প্রতিস্থাপন করতে পারেন xrange
।
আমি numpy.random.sample
এখন ঠিক কাজ করে না বলে মনে করি । এটা আমার পথ:
import numpy as np
np.random.choice(range(20), 10, replace=False)
range(n)
(বা arange(n)
) পরিবর্তে choice
এটি কেবল পাসের সমতুল্য n
, যেমন choice(20, 10, replace=False)
।
np.random.choice(a, size, replace=False)
বড়দের জন্য খুব ধীর a
- আমার মেশিনে, এক = 1 এম এর জন্য প্রায় 30 এমএস।
n
ব্যবহারের জন্য সময় এবং স্মৃতি সমস্যাগুলি এড়ানোর জন্য numpy.random.Generator.choice
(নপি v1.17 দিয়ে শুরু)
বছরগুলি পরে, 10000 ^ 2 এর মধ্যে 40000 বেছে নেওয়ার জন্য কিছু সময়সীমা (নম্পি 1.8.1, ইম্যাক 2.7 গিগাহার্টজ):
import random
import numpy as np
n = 10000
k = 4
np.random.seed( 0 )
%timeit np.random.choice( n**2, k * n, replace=True ) # 536 µs ± 1.58 µs
%timeit np.random.choice( n**2, k * n, replace=False ) # 6.1 s ± 9.91 ms
# https://docs.scipy.org/doc/numpy/reference/random/index.html
randomstate = np.random.default_rng( 0 )
%timeit randomstate.choice( n**2, k * n, replace=False, shuffle=False ) # 766 µs ± 2.18 µs
%timeit randomstate.choice( n**2, k * n, replace=False, shuffle=True ) # 1.05 ms ± 1.41 µs
%timeit random.sample( range( n**2 ), k * n ) # 47.3 ms ± 134 µs
(10000 out 2 এর মধ্যে 40000 কেন বেছে নেবেন? বড় বড় স্কিপি.স্পার্স.অরেন্ডম
ম্যাট্রিক্স উত্পন্ন করতে
- স্কিপি 1.4.1 ব্যবহার করুন np.random.choice( replace=False )
, স্লোওউও))
Numpy.random লোকদের টুপি টিপ।
পাইথন সেট তালিকার রূপান্তর ব্যবহার করা যেতে পারে। 0 থেকে 20 এর মধ্যে 10 টি অনন্য নম্বর হিসাবে প্রাপ্ত করা যেতে পারে:
import numpy as np
import random
unique_numbers=set()
while(len(unique_numbers)<10):
unique_numbers.add(np.random.randint(0,20))
unique_numbers=list(unique_numbers)
random.shuffle(unique_numbers)
print(unique_numbers)
কেবলমাত্র একটি অ্যারে তৈরি করুন যাতে প্রয়োজনীয় সংখ্যার ব্যাপ্তি থাকে, তবে অ্যারেতে 0 তম উপাদান সহ বারবার এলোমেলো করে এগুলি এলোমেলো করুন। এটি একটি এলোমেলো ক্রম উত্পাদন করে যা সদৃশ মান ধারণ করে না।