একটি ব্যাপ্তির মধ্যে ভাসমান এলোমেলো অ্যারে তৈরি করুন


90

একটি নির্দিষ্ট ব্যাপ্তির মধ্যে প্রদত্ত দৈর্ঘ্যের এলোমেলো ফ্লোটের একটি অ্যারের উত্পন্ন করার জন্য আমি কোনও ফাংশন খুঁজে পাইনি।

আমি র্যান্ডম নমুনা দেখেছি কিন্তু কোনও ক্রিয়াকলাপ আমার প্রয়োজনের মতো করে না বলে মনে হচ্ছে।

random.uniform নিকটে আসে তবে এটি কেবল একটি একক উপাদান দেয়, নির্দিষ্ট সংখ্যাটি দেয় না।

এই আমি পরে যাচ্ছি:

ran_floats = some_function(low=0.5, high=13.3, size=50)

যা পরিসরে অভিন্নভাবে বিতরণ করা 50 এলোমেলো অ-অনন্য ফ্লোট (যেমন: পুনরাবৃত্তির অনুমতি দেওয়া হয়) এর অ্যারে ফেরত দেয় [0.5, 13.3]

এমন কোন ফাংশন আছে?


4
আপনি প্রশ্নটি ট্যাগ করেছেন numpy, তবে আপনি উল্লেখ করতে পারেন নি numpy.random.uniform, যদিও এটির কল স্বাক্ষরটি হ'ল। আপনার কাছে কি numpyগ্রন্থাগার পাওয়া যায়?
ডিএসএম

4
[random.uniform(low, high) for i in xrange(size)]
ফিলোজিনিসিস

4
@ ডিএসএম হ্যাঁ আমার আছে এবং আপনি দৃশ্যত 100% সঠিক। আমি সেই ফাংশনটি মিস করেছি এবং এটি আমার যা প্রয়োজন ঠিক তা করতে দেখা যাচ্ছে। উত্তর হিসাবে আপনার মন্তব্য উপস্থাপন করতে আপনি কি আপত্তি করতে চান?
গ্যাব্রিয়েল

উত্তর:


144

np.random.uniform আপনার ব্যবহারের ক্ষেত্রে ফিট করে:

sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))

অক্টোবর 2019 আপডেট করুন:

সিনট্যাক্সটি এখনও সমর্থিত থাকা অবস্থায়, এলোমেলো সংখ্যা জেনারেটরের উপর বৃহত্তর নিয়ন্ত্রণের জন্য এনপিআই NumPy 1.17 এর পরিবর্তিত বলে মনে হচ্ছে। এগিয়ে যাওয়া এপিআই পরিবর্তন হয়েছে এবং আপনার https://docs.scipy.org/doc/numpy/references/random/generated/numpy.random.Generator.uniform.html দেখতে হবে

বর্ধন প্রস্তাবটি এখানে: https://numpy.org/neps/nep-0019-rng-policy.html


23
ওপির স্বজ্ঞাত অনুসন্ধানের প্রশ্নটি some_function(low=0.5, high=13.3, size=50)। অজগর পাটগুলি কতটা সুন্দরভাবে ডিজাইন করা হয়েছে তা # নতুনভাবে
রামচন্দ্রন

আকার সম্পূর্ণ পরিষ্কার ছিল না এবং লিঙ্কটি কাজ করে না। এখানে একটি ছোটখাটো ব্যাখ্যা দেওয়া হল। আকার: অন্তর্নির্মিত বা ints এর tuple, alচ্ছিক। আউটপুট আকার। প্রদত্ত আকারটি যদি উদাঃ, (এম, এন, কে) হয় তবে মি * এন * কে নমুনা আঁকুন। যদি আকারটি কোনও ডিফল্ট না থাকে), নিম্ন এবং উচ্চতর উভয় স্কেলারের হলে একক মান ফেরত দেওয়া হয়।
ভ্লাদ

@ ভ্লাদ - লিঙ্কটি সহ সমস্যাটি দেখানোর জন্য ধন্যবাদ। আশা করি বর্তমান ব্যবহারটি কভার করার জন্য উত্তরটি আপডেট করেছি।
জোশআডেল

21

একটি তালিকা বোধগম্য ব্যবহার করবেন না কেন?

পাইথন 2 এ

ran_floats = [random.uniform(low,high) for _ in xrange(size)]

পাইথন 3-তে, ( রেফারি ) এর rangeমতো কাজ করেxrange

ran_floats = [random.uniform(low,high) for _ in range(size)]


3

আপনি যা খুঁজছেন তা করার জন্য ইতিমধ্যে কোনও ফাংশন থাকতে পারে তবে আমি এটি সম্পর্কে এখনও জানি না (এখনও?)। ইতিমধ্যে, আমি ব্যবহার করে সুগন্ধি করব:

ran_floats = numpy.random.rand(50) * (13.3-0.5) + 0.5

এটি 0.5 থেকে 13.3 এর মধ্যে অভিন্ন বিতরণ সহ একটি আকারের অ্যারের (50,) উত্পাদন করবে।

আপনি একটি ফাংশন সংজ্ঞায়িত করতে পারেন:

def random_uniform_range(shape=[1,],low=0,high=1):
    """
    Random uniform range

    Produces a random uniform distribution of specified shape, with arbitrary max and
    min values. Default shape is [1], and default range is [0,1].
    """
    return numpy.random.rand(shape) * (high - min) + min

সম্পাদনা : হুম, হ্যাঁ, তাই আমি এটি মিস করেছি, সেখানে নাম্পি.আরন্ডম.উইনফর্ম () রয়েছে ঠিক একই কলটি আপনি চান! import numpy; help(numpy.random.uniform)আরও তথ্যের জন্য চেষ্টা করুন।


3

তালিকা বোঝার জন্য লুপটি সময় নেয় এবং এটি ধীর করে দেয়। নপি পরামিতি (কম, উচ্চ, আকার, .. ইত্যাদি) ব্যবহার করা ভাল better

import numpy as np
import time
rang = 10000
tic = time.time()
for i in range(rang):
    sampl = np.random.uniform(low=0, high=2, size=(182))
print("it took: ", time.time() - tic)

tic = time.time()
for i in range(rang):
    ran_floats = [np.random.uniform(0,2) for _ in range(182)]
print("it took: ", time.time() - tic)

নমুনা আউটপুট:

('এটি গ্রহণ করেছে:', 0.06406784057617188)

('এটি গ্রহণ করেছে:', 1.7253198623657227)


3

বিকল্পভাবে আপনি SciPy ব্যবহার করতে পারেন

from scipy import stats
stats.uniform(0.5, 13.3).rvs(50)

এবং পূর্ণসংখ্যার নমুনা রেকর্ডের জন্য এটি

stats.randint(10, 20).rvs(50)


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