وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

راهنمای تابع arange() NumPy

0 50
زمان لازم برای مطالعه: 6 دقیقه


معرفی

NumPy محبوب ترین کتابخانه محاسباتی ریاضی پایتون است. تعداد زیادی ابزار ریاضی از جمله آرایه‌ها و ماتریس‌های چند بعدی، توابع ریاضی، مولدهای اعداد و موارد دیگر را ارائه می‌دهد.

یکی از ابزارهای اساسی در NumPy است ndarray – یک آرایه N بعدی. امروز، ما قصد داریم ایجاد کنیم دارای ها، در محدوده های خاصی با استفاده از NumPy.arange() تابع.

پارامترها و بازگشت

numpy.arange((start, )stop, (step, )dtype=None)

مقادیر با فاصله یکنواخت را در یک بازه معین برمی گرداند که در آن:

  • شروع کنید یک عدد (صحیح یا واقعی) است که آرایه از آن شروع می شود. اختیاری است.
  • متوقف کردن عددی است (صحیح یا حقیقی) که آرایه به آن ختم می شود و در آن گنجانده نمی شود.
  • گام عددی است که فاصله بین مقادیر متوالی در آرایه را تعیین می کند. اختیاری است و به طور پیش فرض 1 است.
  • dtype نوع خروجی عناصر آرایه است. به طور پیش فرض None است.

متد an را برمی گرداند ndarray از مقادیر مساوی با فاصله اگر آرایه عناصر ممیز شناور را برگرداند، طول آرایه خواهد بود ceil((stop - start)/step).

np.arange() توسط مثال

وارد کردن NumPy

برای شروع کار با NumPy، باید import آن، زیرا یک کتابخانه خارجی است:

import NumPy as np

در صورت عدم نصب، می توانید به راحتی آن را از طریق نصب کنید pip:

$ pip install numpy

همه برهان np.arange()

بیایید ببینیم چگونه arange() با تمام آرگومان های تابع کار می کند. برای مثال، می‌خواهیم دنباله‌ای از 0 شروع شود، در 10 متوقف شود، با اندازه گام 3، در حالی که اعداد صحیح تولید کنیم.

در یک محیط پایتون یا REPL، بیایید یک دنباله در یک محدوده ایجاد کنیم:

>>> result_array = np.arange(start=0, stop=10, step=2, dtype=int)

این array هست یک ndarray حاوی عناصر تولید شده:

>>> result_array
array((0, 2, 4, 6, 8))

شایان ذکر است که stop عنصر گنجانده نشده است، در حالی که start عنصر گنجانده شده است، از این رو ما یک 0 اما نه a 10 حتی اگر عنصر بعدی در دنباله باید a باشد 10.

توجه داشته باشید: طبق معمول، می توانید آرگومان های موضعی را بدون نام بردن از آنها ارائه دهید یا آرگومان های نامگذاری شده

تا زمانی که موقعیت‌های آن‌ها را به خاطر بسپارید – ممکن است نام‌گذاری آنها کمک کند:

array = np.arange(start=0, stop=10, step=2, dtype=int)

array = np.arange(0, 10, 2, int)

برای اختصار، اغلب از دومی و مواضع این استدلال ها استفاده می شود باید دنباله ای از start، stop، step، و dtype.

np.arange() با متوقف کردن

اگر فقط یکی استدلال ارائه شده است، آن را به عنوان stop ارزش. خروجی تمام اعداد تا، اما بدون شامل stop شماره، با مرحله پیش‌فرض 1 و start از 0:

>>> result_array = np.arange(5)
>>> result_array
array((0, 1, 2, 3, 4))

np.arange() با شروع کنید و متوقف کردن

با دو آرگومان، آنها به طور پیش فرض به start و stop، با پیش فرض step از 1 – بنابراین می توانید به راحتی یک محدوده خاص بدون فکر کردن به اندازه گام ایجاد کنید:

>>> result_array = np.arange(5, 10)
>>> result_array
array((5, 6, 7, 8, 9))

مانند مثال های قبلی، در اینجا نیز می توانید به جای اعداد صحیح از اعداد ممیز شناور استفاده کنید. به عنوان مثال، می توانیم از 5.5 شروع کنیم:

>>> result_array = np.arange(5.5, 11.75)

آرایه حاصل به صورت زیر خواهد بود:

>>> result_array
array(( 5.5,  6.5,  7.5,  8.5,  9.5, 10.5, 11.5))

np.arange() با شروع کنید، متوقف کردن و گام

به طور پیش فرض dtype است None و در آن صورت، ints استفاده می شود بنابراین داشتن یک محدوده مبتنی بر اعداد صحیح به راحتی با a ایجاد می شود start، stop و step. به عنوان مثال، بیایید دنباله ای از تمام اعداد زوج بین آنها ایجاد کنیم 6 (شامل) و 22 (انحصاری):

>>> result_array = np.arange(6, 22, 2)

نتیجه همه اعداد زوج بین 6 تا 22 خواهد بود.

>>> result_array
array(( 6,  8, 10, 12, 14, 16, 18, 20))

np.arange() برای محدوده های معکوس

ما هم می توانیم عبور کنیم پارامترهای منفی به درون np.arange() تابعی برای بدست آوردن یک آرایه معکوس از اعداد.

این start عدد بزرگتری خواهد بود که می خواهیم از آن شروع به شمارش کنیم stop پایین تر خواهد بود و مرحله یک عدد منفی خواهد بود:

result_array = np.arange(start=30,stop=14, step=-3)

نتیجه آرایه ای از اعداد نزولی با a خواهد بود گام منفی از 3:

>>> result_array
array((30, 27, 24, 21, 18, 15))

ایجاد NDAray های خالی با np.arange()

ما همچنین می توانیم خالی ایجاد کنیم arange به شرح زیر است:

>>> result_array = np.arange(0)

نتیجه یک آرایه خالی خواهد بود:

>>> result_array
array((), dtype=int32)

این اتفاق می افتد زیرا 0 هست stop مقداری که ما تعیین کرده ایم، و مقدار شروع نیز است 0 به صورت پیش فرض. بنابراین، شمارش قبل از شروع متوقف می شود.

مورد دیگری که در آن نتیجه یک آرایه خالی خواهد بود زمانی است که مقدار شروع بالاتر از مقدار توقف باشد در حالی که گام مثبت است. مثلا:

>>> result_array = np.arange(start=30, stop=10, step=1)

نتیجه نیز یک آرایه خالی خواهد بود.

>>> result_array
array((), dtype=int32)

این می تواند برعکس نیز اتفاق بیفتد. ما می توانیم با یک عدد کوچک شروع کنیم، روی یک عدد بزرگتر توقف کنیم و آن را داشته باشیم step به عنوان یک عدد منفی خروجی نیز یک آرایه خالی خواهد بود:

>>> result_array = np.arange(start=10, stop=30, step=-1)

این نیز منجر به خالی می شود ndarray:

>>> result_array
array((), dtype=int32)

انواع داده های پشتیبانی شده برای np.arange()

این dtype آرگومان، که به طور پیش فرض به int می تواند هر نوع داده NumPy معتبر.

توجه داشته باشید: با این حال، این نباید با انواع داده های استاندارد پایتون اشتباه گرفته شود.

می‌توانید از نسخه مختصر برای برخی از انواع داده‌های رایج‌تر یا نام کامل، با پیشوند استفاده کنید np.:

np.arange(..., dtype=int)
np.arange(..., dtype=np.int32)
np.arange(..., dtype=np.int64)

برای برخی از انواع داده های دیگر، مانند np.csignle، پیشوند نوع را با np.:

>>> result_array = np.arange(start=10, stop=30, step=1, dtype=np.csingle)
>>> result_array
array((10.+0.j, 11.+0.j, 12.+0.j, 13.+0.j, 14.+0.j, 15.+0.j, 16.+0.j,
       17.+0.j, 18.+0.j, 19.+0.j, 20.+0.j, 21.+0.j, 22.+0.j, 23.+0.j,
       24.+0.j, 25.+0.j, 26.+0.j, 27.+0.j, 28.+0.j, 29.+0.j),
      dtype=complex64)

یک نوع داده کوتاه دست کوتاه یک است float:

>>> result_array = np.arange(start=10, stop=30, step=1, dtype=float)
>>> result_array
array((10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22.,
       23., 24., 25., 26., 27., 28., 29.))

برای لیستی از انواع داده های NumPy پشتیبانی شده، نگاهی به آن بیندازید اسناد رسمی.

np.arange() در مقابل np.linspace()

np.linspace() شبیه است به np.arange() در بازگشت آرایه های مساوی فاصله. با این حال ، چند تفاوت وجود دارد.

با np.linspace()، تعداد نمونه ها را در یک محدوده مشخص به جای تعیین مرحله مشخص می کنید. علاوه بر این، می توانید نقاط پایانی را در آرایه برگشتی قرار دهید. تفاوت دیگر این است که np.linspace() می تواند به جای برگرداندن تنها یک آرایه، چندین آرایه تولید کند.

این یک مثال ساده از np.linspace() با نقطه پایانی و 5 نمونه:

>>> result_array = np.linspace(0, 20, num=5, endpoint=True)
>>> result_array
array(( 0.,  5., 10., 15., 20.))

در اینجا هم تعداد نمونه ها و هم اندازه گام است 5، اما این تصادفی است:

>>> result_array = np.linspace(0, 20, num=2, endpoint=True)
>>> result_array
array(( 0., 20.))

در اینجا، ما دو نقطه بین 0 تا 20 را مشخص می کنیم، بنابراین آنها به طور طبیعی 20 قدم از هم فاصله دارند. شما همچنین می توانید endpoint به False و np.linspace() بیشتر شبیه رفتار خواهد کرد np.arange() در این صورت عنصر نهایی را شامل نمی شود:

>>> result_array = np.linspace(0, 20, num=5, endpoint=False)
>>> result_array
array(( 0.,  4.,  8., 12., 16.))

np.arange() در مقابل داخلی دامنه()

پایتون داخلی range() عملکرد و np.arange() شباهت های زیادی دارند اما تفاوت های جزئی دارند. در بخش‌های بعدی، برخی از شباهت‌ها و تفاوت‌های آنها را برجسته می‌کنیم.

پارامترها و بازده

شباهت های اصلی این است که هر دو آنها دارای start، stop، و step. علاوه بر این ، آنها هر دو هستند start فراگیر، و stop منحصر به فرد ، با یک پیش فرض step از 1.

با این حال:

  1. می تواند چندین نوع داده از جمله شناورها و اعداد مختلط را مدیریت کند
  2. برمی گرداند a ndarray
  3. آرایه به طور کامل در حافظه ایجاد می شود
  1. فقط می تواند اعداد صحیح را مدیریت کند
  2. برمی‌گرداند a range هدف – شی
  3. اعداد را تولید می کند روی تقاضا

کارایی و سرعت

بین سرعت و کارایی تفاوت هایی وجود دارد np.arange() و داخلی range() تابع. تابع محدوده اعداد را تولید می کند روی تقاضا می کند و آنها را در حافظه ایجاد نمی کند.

این به سرعت بخشیدن به process اگر می دانید جایی در آن محدوده شکسته خواهید شد: به عنوان مثال:

for i in range(100000000):
    if i == some_number:
        break

این حافظه کمتری مصرف می کند زیرا همه اعداد از قبل ایجاد نشده اند. این نیز باعث می شود ndarrays ساخت اولیه کندتر است.

با این حال، اگر همچنان به کل محدوده اعداد در حافظه نیاز دارید، np.arange() به طور قابل توجهی سریعتر از range() چه زمانی طیف کامل اعداد وارد بازی می شود، بعد از ساخته شده اند

به عنوان مثال، اگر فقط از طریق آنها تکرار کنیم، زمان لازم برای ایجاد آرایه ها ایجاد می شود np.arange() عملکرد کندتر به دلیل هزینه اولیه بالاتر:

$ python -m timeit "for i in range(100000): pass"
200 loops, best of 5: 1.13 msec per loop

$ python -m timeit "import numpy as np" "for i in np.arange(100000): pass"
100 loops, best of 5: 3.83 msec per loop

نتیجه

هدف این راهنما این است که به شما در درک چگونگی np.arange() عملکرد تابع و روش تولید دنباله ای از اعداد.

در اینجا خلاصه ای از آنچه را که به تازگی پوشش دادیم آورده شده است.

  1. np.arange() دارای 4 پارامتر:
    • شروع کنید یک عدد (صحیح یا واقعی) است که آرایه از آن شروع می شود. اختیاری است.
    • متوقف کردن عددی است (صحیح یا حقیقی) که آرایه به آن ختم می شود و در آن گنجانده نمی شود.
    • گام عددی است که فاصله بین مقادیر متوالی در آرایه را تعیین می کند. اختیاری است و به طور پیش فرض 1 است.
    • dtype نوع خروجی عناصر آرایه است. این است None به صورت پیش فرض.
  2. می توانید از چندگانه استفاده کنید dtypes با arange از جمله اینت ها، شناورها و اعداد مختلط.
  3. شما می توانید با داشتن عدد بزرگتر به عنوان محدوده معکوس ایجاد کنید شروع کنید، عدد کوچکتر به عنوان متوقف کردن، و گام به عنوان یک عدد منفی
  4. np.linspace() شبیه است به np.arange() در تولید طیف وسیعی از اعداد، اما در شامل توانایی گنجاندن نقطه پایانی و تولید تعدادی از نمونه ها بجای مراحل، که بر اساس محاسبه می شوند روی تعداد نمونه ها
  5. np.arange() زمانی که نیاز به ایجاد کل آرایه دارید نسبت به محدوده کارآمدتر است. با این حال، اگر بدانید که هنگام حلقه زدن جایی شکسته خواهید شد، محدوده بهتر است.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-08 22:56:09

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید