از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
راهنمای تابع arange() NumPy
سرفصلهای مطلب
معرفی
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
و در آن صورت، int
s استفاده می شود بنابراین داشتن یک محدوده مبتنی بر اعداد صحیح به راحتی با 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
.
با این حال:
- می تواند چندین نوع داده از جمله شناورها و اعداد مختلط را مدیریت کند
- برمی گرداند a
ndarray
- آرایه به طور کامل در حافظه ایجاد می شود
- فقط می تواند اعداد صحیح را مدیریت کند
- برمیگرداند a
range
هدف – شی - اعداد را تولید می کند روی تقاضا
کارایی و سرعت
بین سرعت و کارایی تفاوت هایی وجود دارد 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()
عملکرد تابع و روش تولید دنباله ای از اعداد.
در اینجا خلاصه ای از آنچه را که به تازگی پوشش دادیم آورده شده است.
np.arange()
دارای 4 پارامتر:- شروع کنید یک عدد (صحیح یا واقعی) است که آرایه از آن شروع می شود. اختیاری است.
- متوقف کردن عددی است (صحیح یا حقیقی) که آرایه به آن ختم می شود و در آن گنجانده نمی شود.
- گام عددی است که فاصله بین مقادیر متوالی در آرایه را تعیین می کند. اختیاری است و به طور پیش فرض 1 است.
- dtype نوع خروجی عناصر آرایه است. این است
None
به صورت پیش فرض.
- می توانید از چندگانه استفاده کنید dtypes با
arange
از جمله اینت ها، شناورها و اعداد مختلط. - شما می توانید با داشتن عدد بزرگتر به عنوان محدوده معکوس ایجاد کنید شروع کنید، عدد کوچکتر به عنوان متوقف کردن، و گام به عنوان یک عدد منفی
np.linspace()
شبیه است بهnp.arange()
در تولید طیف وسیعی از اعداد، اما در شامل توانایی گنجاندن نقطه پایانی و تولید تعدادی از نمونه ها بجای مراحل، که بر اساس محاسبه می شوند روی تعداد نمونه هاnp.arange()
زمانی که نیاز به ایجاد کل آرایه دارید نسبت به محدوده کارآمدتر است. با این حال، اگر بدانید که هنگام حلقه زدن جایی شکسته خواهید شد، محدوده بهتر است.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-08 22:56:09