0 থেকে 9 এর মধ্যে এলোমেলো পূর্ণসংখ্যা তৈরি করুন


1335

পাইথনে আমি কীভাবে 0 থেকে 9 এর মধ্যে এলোমেলো পূর্ণসংখ্যা তৈরি করতে পারি (অন্তর্ভুক্ত)?

উদাহরণস্বরূপ, 0, 1, 2, 3, 4, 5, 6, 7, 8,9


15
0-9 এর "এলোমেলো" প্রজন্মের উপর দুর্দান্ত স্টাইল পয়েন্টগুলি
কলিনম্যাক

উত্তর:


2046

চেষ্টা করুন:

from random import randrange
print(randrange(10))

আরও তথ্য: http://docs.python.org/library/random.html#random.randrange


79
কেবল একটি নোট, এগুলি সিউডোরান্ডম সংখ্যা এবং এগুলি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত নয়। কোনও আক্রমণকারী আপনার নম্বর অনুমান করতে চান না এমন ক্ষেত্রে এটি ব্যবহার করবেন না। ব্যবহার করুন secretsভাল র্যান্ডম সংখ্যার জন্য মডিউল। তথ্যসূত্র: docs.python.org/3/library/random.html

465
import random
print(random.randint(0,9))

random.randint(a, b)

একটি এলোমেলো পূর্ণসংখ্যা N যেমন এমন একটি <= N <= খ।

দস্তাবেজ: https://docs.python.org/3.1/library/random.html#random.randint


1
নতুন পাইথন সংস্করণগুলিতে, উপরের সীমাটি একচেটিয়া বলে মনে হচ্ছে (যেমন randint(0,9)কখনই 9 ফেরত আসবে না)। এটি অনলাইন ডকুমেন্টেশনে প্রতিফলিত হয় না, তবে এটি অন্তর্নির্মিত সহায়তায় রয়েছে।
Yly


81
from random import randint

x = [randint(0, 9) for p in range(0, 10)]

এটি 0 থেকে 9 সহ 10 টি সিউডোরডম পূর্ণসংখ্যা জেনারেট করে।


63

secretsমডিউল পাইথন 3.6 মধ্যে নতুন। এটি randomক্রিপ্টোগ্রাফি বা সুরক্ষা ব্যবহারের জন্য মডিউলটির চেয়ে ভাল ।

অন্তর্ভুক্ত ব্যাপ্তি 0-9 এ এলোমেলোভাবে একটি পূর্ণসংখ্যা মুদ্রণ করতে:

from secrets import randbelow
print(randbelow(10))

বিশদগুলির জন্য, পিইপি 506 দেখুন


3
এটি উত্তরের উন্নতি করবে এবং যুক্ত করা উচিত। আরও বেশি সুরক্ষিত মনের উত্তর পাওয়া গেলে সর্বদা যোগ করা উচিত।
সুডোকিড

30

অ্যারের আকার চয়ন করুন (এই উদাহরণে, আমি আকারটি 20 হতে বেছে নিয়েছি)। এবং তারপরে, নিম্নলিখিতটি ব্যবহার করুন:

import numpy as np   
np.random.randint(10, size=(1, 20))

আপনি নিম্নলিখিত ফর্মটির একটি আউটপুট দেখতে আশা করতে পারেন ( প্রতিটি বার চালানোর সময় বিভিন্ন এলোমেলো পূর্ণসংখ্যা ফিরে আসবে; অতএব আপনি আউটপুট অ্যারেতে পূর্ণসংখ্যাগুলি নীচের বর্ণিত উদাহরণ থেকে পৃথক হতে পারবেন )।

array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])

2
এটি জানার জন্যও সহায়ক যে নম্পি কেবলমাত্র একটি একক এলোমেলো সংখ্যা নয়, নির্দিষ্ট আকারের এলোমেলো অ্যারে তৈরি করতে পারে। (ডক্স: numpy.random.randint )
jkdev

28

এর মাধ্যমে চেষ্টা করুন random.shuffle

>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]

এটি কোনও সঠিক উত্তর নয় এবং মুছে ফেলা উচিত।
নিকোলাস গ্রাভেইস

21

আমি নিম্নলিখিতগুলির মধ্যে একটি চেষ্টা করব:

1.> numpy.random.randint

import numpy as np
X1 = np.random.randint(low=0, high=10, size=(15,))

print (X1)
>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])

2.> numpy.random.uniform

import numpy as np
X2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)

print (X2)
>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])

3.> random.randrange

from random import randrange
X3 = [randrange(10) for i in range(15)]

print (X3)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]

4.> random.randint

from random import randint
X4 = [randint(0, 9) for i in range(0, 15)]

print (X4)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]

দ্রুততা:

np.random.randint হয় দ্রুততম , দ্বারা অনুসরণ np.random.uniform এবং random.randrangerandom.randint হ'ল ধীরে

► উভয়ই এনপি.আরান্ডম.অরান্টিন্ট এবং এনপি.আরন্ডম.উনিফর্ম র্যান্ডম.আরেন্ডারেঞ্জ এবং র্যান্ডম.র্যান্ডিন্টের চেয়ে অনেক বেশি দ্রুত (~ 8 - 12 গুণ বেশি দ্রুত) ।

%timeit np.random.randint(low=0, high=10, size=(15,))
>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)
>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit [randrange(10) for i in range(15)]
>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit [randint(0, 9) for i in range(0, 15)]
>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

মন্তব্য:

1.> np.random.randint অর্ধ-খোলা ব্যবধান [নিম্ন, উচ্চ) এর উপর এলোমেলো পূর্ণসংখ্যার উত্পন্ন করে।

2.> np.random.uniform অর্ধ-খোলা ব্যবধানে [নিম্ন, উচ্চ) একসাথে বিতরণ সংখ্যা উত্পন্ন করে।

3.> random.randrange (স্টপ) পরিসর থেকে একটি এলোমেলো সংখ্যা উত্পন্ন করে (শুরু করুন, থামুন, পদক্ষেপ)।

৪.> random.randint (a, b) একটি এলোমেলো পূর্ণসংখ্যা N এমনভাবে প্রদান করে যে একটি <= N <= b।

৫.> অ্যাস্টাইপ (ইনট) নমপি অ্যারেটি ইনটার ডেটা টাইপ করে।

>.> আমি আকার = (15,) বেছে নিয়েছি। এটি আপনাকে দৈর্ঘ্যের একটি অদ্ভুত অ্যারে = 15 দেবে।


18

অবিচ্ছিন্ন সংখ্যার ক্ষেত্রে randintবা randrangeসম্ভবত সেরা পছন্দগুলির মধ্যে তবে আপনার যদি ক্রম (যেমন ক list) এর বিভিন্ন স্বতন্ত্র মান থাকে তবে আপনি এটি ব্যবহার করতে পারেন choice:

>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5

choice অবিচ্ছিন্ন নমুনা থেকে একটি আইটেমের জন্যও কাজ করে:

>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7

আপনার যদি এটি "ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী" প্রয়োজন হয়, সেখানে secrets.choiceঅজগর 3.6 এবং আরও নতুন রয়েছে:

>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2

আমরা যদি ক্রম থেকে আরও সংখ্যা চাই?
গুঞ্জন নায়েক

যদি তারা প্রতিস্থাপন ছাড়া হওয়া উচিত: random.sample। প্রতিস্থাপনের সাথে আপনি এর সাথে choiceএকটি [choice(values) for _ in range(3)]
বোঝাপড়া

18

অনেক পোস্ট কিভাবে পেতে প্রকট যদিও এক র্যান্ডম পূর্ণসংখ্যা, মূল প্রশ্ন হল কিভাবে র্যান্ডম পূর্ণসংখ্যা জেনারেট করতে জিজ্ঞেস করল গুলি (বহুবচন):

পাইথনে আমি কীভাবে 0 থেকে 9 এর মধ্যে এলোমেলো পূর্ণসংখ্যা তৈরি করতে পারি (অন্তর্ভুক্ত)?

স্পষ্টতার জন্য, আমরা এখানে একাধিক এলোমেলো পূর্ণসংখ্যা প্রাপ্ত তা প্রদর্শন করি।

প্রদত্ত

>>> import random


lo = 0
hi = 10
size = 5

কোড

একাধিক, র্যান্ডম পূর্ণসংখ্যার

# A
>>> [lo + int(random.random() * (hi - lo)) for _ in range(size)]
[5, 6, 1, 3, 0]

# B
>>> [random.randint(lo, hi) for _ in range(size)]
[9, 7, 0, 7, 3]

# C
>>> [random.randrange(lo, hi) for _ in range(size)]
[8, 3, 6, 8, 7]

# D
>>> lst = list(range(lo, hi))
>>> random.shuffle(lst)
>>> [lst[i] for i in range(size)]
[6, 8, 2, 5, 1]

# E
>>> [random.choice(range(lo, hi)) for _ in range(size)]
[2, 1, 6, 9, 5]

র্যান্ডম পূর্ণসংখ্যার নমুনা

# F
>>> random.choices(range(lo, hi), k=size)
[3, 2, 0, 8, 2]

# G
>>> random.sample(range(lo, hi), k=size)
[4, 5, 1, 2, 3]

বিস্তারিত

কিছু পোস্ট দেখায় যে কীভাবে একাধিক এলোমেলো পূর্ণসংখ্যার উত্পন্ন করা যায়। 1 এখানে কিছু বিকল্প রয়েছে যা অন্তর্ভুক্ত প্রশ্নটিকে সম্বোধন করে:

  • উত্তর : random.randomপরিসরে একটি এলোমেলো ফ্লোট ফেরত দেয়[0.0, 1.0)
  • বি : এমন random.randintএকটি এলোমেলো পূর্ণসংখ্যা প্রদান Nকরেa <= N <= b
  • সি : random.randrangeওরফে থেকেrandint(a, b+1)
  • ডি : random.shuffleজায়গায় একটি ক্রম পরিবর্তন
  • : random.choiceখালি শৃঙ্খলা থেকে একটি এলোমেলো উপাদান দেয়
  • এফ : জনসংখ্যার থেকে নির্বাচনগুলি random.choicesফিরিয়ে দেয় k(প্রতিস্থাপন সহ পাইথন ৩.6++)
  • জি : random.sampleফেরৎ kজনসংখ্যা থেকে (প্রতিস্থাপন ছাড়া) অনন্য পছন্দসই মান নির্বাচন করে: 2

আরও দেখুন আর Hettinger এর আলাপ কদর্য এবং aliasing থেকে উদাহরণ ব্যবহার করে randomমডিউল।

এখানে স্ট্যান্ডার্ড লাইব্রেরি এবং নম্পি কিছু র্যান্ডম ফাংশনগুলির একটি তুলনা করা হয়েছে:

| | random                | numpy.random                     |
|-|-----------------------|----------------------------------|
|A| random()              | random()                         |
|B| randint(low, high)    | randint(low, high)               |
|C| randrange(low, high)  | randint(low, high)               |
|D| shuffle(seq)          | shuffle(seq)                     |
|E| choice(seq)           | choice(seq)                      |
|F| choices(seq, k)       | choice(seq, size)                |
|G| sample(seq, k)        | choice(seq, size, replace=False) |

আপনি নিম্পিতে অনেকগুলি বিতরণের যে কোনওটিকে এলোমেলো পূর্ণসংখ্যার নমুনায় দ্রুত রূপান্তর করতে পারেন । 3

উদাহরণ

>>> np.random.normal(loc=5, scale=10, size=size).astype(int)
array([17, 10,  3,  1, 16])

>>> np.random.poisson(lam=1, size=size).astype(int)
array([1, 3, 0, 2, 0])

>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)
array([1, 3, 1, 5, 1])

1 যথা @ জন লরেন্স অ্যাসপডেন, @ এসএম মোহাম্মদ, @ সিড দ্য কিড, @ ব্যবহারকারী ১৪৩72২, @ জাংউ, এট আল। 2 @ প্রশান্ত একটি সংখ্যার এই মডিউলটির উল্লেখ করেছেন। 3 সিদ্ধার্থ সাতপ্যাথি দ্বারা প্রদর্শিত হয়েছে


14

আপনি যদি নপি ব্যবহার করতে চান তবে নিম্নলিখিতগুলি ব্যবহার করুন:

import numpy as np
print(np.random.randint(0,10))

1
আপনি "নিম্পি" সম্পর্কে কিছু বলতে পারেন।
সিমেন

11
হ্যাঁ। লিঙ্কের জন্য ধন্যবাদ। তবে আমি বলতে চাইছিলাম যে আপনি কেবল দুটি লাইনের কোড উদ্ধৃত করার আগে বিশদ সরবরাহ করে আপনার উত্তরটি উন্নত করতে পারতেন; পছন্দ করুন কোনও কারণে ইতিমধ্যে অন্তর্নির্মিত কোনও জিনিসের পরিবর্তে কেউ এটি ব্যবহার করতে পছন্দ করবে। তা নয় যে আপনি যেভাবেই বাধ্য ob
সিমেন



6

random.sample অন্যটি ব্যবহার করা যেতে পারে

import random
n = 1 # specify the no. of numbers
num = random.sample(range(10),  n)
num[0] # is the required number

6

আমদানি র্যান্ডম ফাংশনটি ব্যবহার করা সবচেয়ে ভাল উপায়

import random
print(random.sample(range(10), 10))

বা কোনও লাইব্রেরি আমদানি ছাড়াই:

n={} 
for i in range(10):
    n[i]=i

for p in range(10):
    print(n.popitem()[1])

এখানে পপাইটেমগুলি অভিধান থেকে একটি স্বেচ্ছাসেবী মান সরিয়ে দেয় এবং প্রদান করে n


3

এটি গাণিতিক পদ্ধতির আরও বেশি তবে এটি সময়ের 100% কাজ করে:

ধরা যাক আপনি এবং এর random.random()মধ্যে একটি সংখ্যা তৈরি করতে ফাংশনটি ব্যবহার করতে চান । এটি অর্জনের জন্য, কেবল নিম্নলিখিতটি করুন:ab

num = (b-a)*random.random() + a;

অবশ্যই, আপনি আরও সংখ্যা তৈরি করতে পারেন।


2

এলোমেলো মডিউলটির জন্য ডকুমেন্টেশন পৃষ্ঠা থেকে :

সতর্কতা: এই মডিউলটির সিউডো-এলোমেলো জেনারেটর সুরক্ষা উদ্দেশ্যে ব্যবহার করা উচিত নয়। আপনার যদি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত সিউডো-র্যান্ডম নম্বর জেনারেটরের প্রয়োজন হয় তবে os.urandom () বা SystemRandom ব্যবহার করুন।

এলোমেলো.সিস্টেমর্যান্ডম , যা পাইথন ২.৪ এ প্রবর্তিত হয়েছিল, এটি ক্রিপ্টোগ্রাফিকভাবে নিরাপদ বলে মনে করা হয় । এটি পাইথন 3...1.১ এ এখনও পাওয়া যায় যা লেখার সময় বর্তমান।

>>> import string
>>> string.digits
'0123456789'
>>> import random
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'1'
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'5'

পরিবর্তে string.digits, rangeসম্ভবত একটি বোধগম্যতা সহ অন্যান্য উত্তরগুলির কয়েকটি প্রতি ব্যবহার করা যেতে পারে। আপনার প্রয়োজন অনুসারে মিক্স এবং ম্যাচ করুন।


0

ওপেনয়েণ্টস কেবল এলোমেলো পূর্ণসংখ্যার সিমুলেট করতে দেয় না বরং UserDefinedসংজ্ঞায়িত শ্রেণীর সাথে সম্পর্কিত বিতরণকে সংজ্ঞায়িত করতে দেয় ।

নিম্নলিখিতটি বিতরণের 12 টি ফলাফল অনুকরণ করে।

import openturns as ot
points = [[i] for i in range(10)]
distribution = ot.UserDefined(points) # By default, with equal weights.
for i in range(12):
    x = distribution.getRealization()
    print(i,x)

এই মুদ্রণ:

0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]

বন্ধনী আছে কারণ xএকটি নয় Point1-মাত্রা হবে। একক কলটিতে 12 টি ফলাফল উত্পন্ন করা সহজ হবে getSample:

sample = distribution.getSample(12)

উত্পাদন করবে:

>>> print(sample)
     [ v0 ]
 0 : [ 3  ]
 1 : [ 9  ]
 2 : [ 6  ]
 3 : [ 3  ]
 4 : [ 2  ]
 5 : [ 6  ]
 6 : [ 9  ]
 7 : [ 5  ]
 8 : [ 9  ]
 9 : [ 5  ]
10 : [ 3  ]
11 : [ 2  ]

এই বিষয় সম্পর্কে আরও বিশদ এখানে: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html


-1

পাইথন ৩.6 এর জন্য আমার আরও ভাগ্য ভাল ছিল

str_Key = ""                                                                                                
str_RandomKey = ""                                                                                          
for int_I in range(128):                                                                                    
      str_Key = random.choice('0123456789')
      str_RandomKey = str_RandomKey + str_Key 

চরিত্রের পুলটি থেকে টানতে পরিবর্তন করতে, তৈরি করা অক্ষরের সংখ্যা পরিবর্তনের জন্য পরিসর পরিবর্তন করতে 'ABCD' এবং 'abcd' বা '^! ~ = -> <' এর মতো অক্ষর যুক্ত করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.